* Correct indentation, using correct (I hope) indentation code Note that part of the code, in formatting.ts, is cloned but should be extracted to a function instead. * Remove some possibly-superfluous code But I see 4 failures with whitespace, so perhaps not. * Restrict indentation change to avoid breaking baselines The indentation code is very complex so I'm just going to avoid breaking our single-line tests for now, plus add a simple jsdoc test to show that multiline jsdoc indentation isn't destroyed in the common case. * Switched over to construction for @return/@type Still doesn't merge correctly though * Add @return tags to emitter * Merge multiple jsdocs (not for @param yet) * Merge multiple jsdoc for parameters too * Emit more jsdoc tags Not all of them; I got cold feet since I'll have to write tests for them. I'll do that tomorrow. * Many fixes to JSDoc emit And single tests (at least) for all tags * Cleanup in textChanges.ts * Cleanup in formatting.ts (Plus a little more in textChanges.ts) * Cleanup in inferFromUsage.ts * Fix minor omissions * Separate merged top-level JSDoc comments with \n instead of space. * Don't delete intrusive non-jsdoc comments * Cleanup from PR comments 1. Refactor emit code into smaller functions. 2. Preceding-whitespace utility is slightly easier to use. 3. Better casts and types in inferFromUsage make it easier to read. * Fix bogus newline * Use @andy-ms' cleanup annotateJSDocParameters
95 lines
2.1 KiB
TypeScript
95 lines
2.1 KiB
TypeScript
/// <reference path='fourslash.ts' />
|
|
// @allowJs: true
|
|
// @checkJs: true
|
|
// @noImplicitAny: true
|
|
// @strictNullChecks: false
|
|
// @Filename: important.js
|
|
|
|
/////** @param x no types here! */
|
|
/////**
|
|
//// * 1
|
|
//// * @param x a duplicate!
|
|
//// * @param y yy
|
|
//// */
|
|
/////**
|
|
//// * 2
|
|
//// * @param z zz
|
|
//// */
|
|
////function f(x) {
|
|
//// return x * 1
|
|
////}
|
|
////
|
|
////var o = {
|
|
//// /** 1
|
|
//// * @return First one
|
|
//// */
|
|
//// // intrusive comment (should not be deleted)
|
|
//// /** 2
|
|
//// * @see also
|
|
//// */
|
|
//// /** 3
|
|
//// * @return Second one
|
|
//// * @extends {C<number>} nothing really
|
|
//// * @class
|
|
//// * @this {*} doesn't make sense here
|
|
//// * @enum wat
|
|
//// */
|
|
//// /**
|
|
//// * @typedef {number} Meter or something
|
|
//// * @typedef {Object} Position Comment!
|
|
//// * @property {number} x what a horrible place for a type
|
|
//// * @property {number} y please don't do this
|
|
//// */
|
|
//// /**
|
|
//// * @template {string} T postfix comment
|
|
//// * @callback Action not sure what this will do
|
|
//// * @param {T} thing
|
|
//// * @returns {string} oh no
|
|
//// */
|
|
//// get m() { return undefined }
|
|
////}
|
|
////o.m = 1
|
|
|
|
verify.codeFixAll({
|
|
fixId: "inferFromUsage",
|
|
fixAllDescription: "Infer all types from usage",
|
|
newFileContent:
|
|
`/**
|
|
* 1
|
|
* 2
|
|
* @param {number} x no types here!
|
|
* @param x a duplicate!
|
|
* @param y yy
|
|
* @param z zz
|
|
*/
|
|
function f(x) {
|
|
return x * 1
|
|
}
|
|
|
|
var o = {
|
|
// intrusive comment (should not be deleted)
|
|
/**
|
|
* 1
|
|
* 2
|
|
* 3
|
|
* @returns {number} First one
|
|
* @see also
|
|
* @return Second one
|
|
* @extends {C<number>} nothing really
|
|
* @class
|
|
* @this {*} doesn't make sense here
|
|
* @enum {wat}
|
|
* @typedef {number} Meter or something
|
|
* @typedef {Object} Position Comment!
|
|
* @property {number} x what a horrible place for a type
|
|
* @property {number} y please don't do this
|
|
* @template {string} T postfix comment
|
|
* @callback Action not sure what this will do
|
|
* @param {T} thing
|
|
* @returns {string} oh no
|
|
*/
|
|
get m() { return undefined }
|
|
}
|
|
o.m = 1`,
|
|
});
|
|
|