diff --git a/src/harness/unittests/jsDocParsing.ts b/src/harness/unittests/jsDocParsing.ts index 032c4e848b5..48d280c78dc 100644 --- a/src/harness/unittests/jsDocParsing.ts +++ b/src/harness/unittests/jsDocParsing.ts @@ -44,8 +44,8 @@ namespace ts { parsesCorrectly("functionType1", "{function()}"); parsesCorrectly("functionType2", "{function(string, boolean)}"); parsesCorrectly("functionReturnType1", "{function(string, boolean)}"); - parsesCorrectly("thisType1", "{this:a.b}"); - parsesCorrectly("newType1", "{new:a.b}"); + parsesCorrectly("thisType1", "{function(this:a.b)}"); + parsesCorrectly("newType1", "{function(new:a.b)}"); parsesCorrectly("variadicType", "{...number}"); parsesCorrectly("optionalType", "{number=}"); parsesCorrectly("optionalNullable", "{?=}"); @@ -64,7 +64,7 @@ namespace ts { parsesCorrectly("tupleType3", "{[number,string,boolean]}"); parsesCorrectly("tupleTypeWithTrailingComma", "{[number,]}"); parsesCorrectly("typeOfType", "{typeof M}"); - parsesCorrectly("tsConstructoType", "{new () => string}"); + parsesCorrectly("tsConstructorType", "{new () => string}"); parsesCorrectly("tsFunctionType", "{() => string}"); parsesCorrectly("typeArgumentsNotFollowingDot", "{a<>}"); parsesCorrectly("functionTypeWithTrailingComma", "{function(a,)}"); diff --git a/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.newType1.json b/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.newType1.json index f5956cd2ddb..4458100a3c1 100644 --- a/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.newType1.json +++ b/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.newType1.json @@ -1,32 +1,51 @@ { - "kind": "JSDocConstructorType", - "pos": 4, - "end": 8, + "kind": "JSDocFunctionType", + "pos": 1, + "end": 18, "flags": "JSDoc", - "type": { - "kind": "TypeReference", - "pos": 5, - "end": 8, - "flags": "JSDoc", - "typeName": { - "kind": "FirstNode", - "pos": 5, - "end": 8, + "parameters": { + "0": { + "kind": "Parameter", + "pos": 10, + "end": 17, "flags": "JSDoc", - "left": { + "name": { "kind": "Identifier", - "pos": 5, - "end": 6, + "pos": 10, + "end": 13, "flags": "JSDoc", - "text": "a" + "originalKeywordKind": "NewKeyword", + "text": "new" }, - "right": { - "kind": "Identifier", - "pos": 7, - "end": 8, + "type": { + "kind": "TypeReference", + "pos": 14, + "end": 17, "flags": "JSDoc", - "text": "b" + "typeName": { + "kind": "FirstNode", + "pos": 14, + "end": 17, + "flags": "JSDoc", + "left": { + "kind": "Identifier", + "pos": 14, + "end": 15, + "flags": "JSDoc", + "text": "a" + }, + "right": { + "kind": "Identifier", + "pos": 16, + "end": 17, + "flags": "JSDoc", + "text": "b" + } + } } - } + }, + "length": 1, + "pos": 10, + "end": 17 } } \ No newline at end of file diff --git a/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.thisType1.json b/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.thisType1.json index cb6cfba99fe..276a3bc4ee9 100644 --- a/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.thisType1.json +++ b/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.thisType1.json @@ -1,32 +1,51 @@ { - "kind": "JSDocThisType", - "pos": 5, - "end": 9, + "kind": "JSDocFunctionType", + "pos": 1, + "end": 19, "flags": "JSDoc", - "type": { - "kind": "TypeReference", - "pos": 6, - "end": 9, - "flags": "JSDoc", - "typeName": { - "kind": "FirstNode", - "pos": 6, - "end": 9, + "parameters": { + "0": { + "kind": "Parameter", + "pos": 10, + "end": 18, "flags": "JSDoc", - "left": { + "name": { "kind": "Identifier", - "pos": 6, - "end": 7, + "pos": 10, + "end": 14, "flags": "JSDoc", - "text": "a" + "originalKeywordKind": "ThisKeyword", + "text": "this" }, - "right": { - "kind": "Identifier", - "pos": 8, - "end": 9, + "type": { + "kind": "TypeReference", + "pos": 15, + "end": 18, "flags": "JSDoc", - "text": "b" + "typeName": { + "kind": "FirstNode", + "pos": 15, + "end": 18, + "flags": "JSDoc", + "left": { + "kind": "Identifier", + "pos": 15, + "end": 16, + "flags": "JSDoc", + "text": "a" + }, + "right": { + "kind": "Identifier", + "pos": 17, + "end": 18, + "flags": "JSDoc", + "text": "b" + } + } } - } + }, + "length": 1, + "pos": 10, + "end": 18 } } \ No newline at end of file diff --git a/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.tsConstructoType.json b/tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.tsConstructorType.json similarity index 100% rename from tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.tsConstructoType.json rename to tests/baselines/reference/JSDocParsing/TypeExpressions.parsesCorrectly.tsConstructorType.json diff --git a/tests/baselines/reference/jsdocDisallowedInTypescript.errors.txt b/tests/baselines/reference/jsdocDisallowedInTypescript.errors.txt new file mode 100644 index 00000000000..18a5c99dfd0 --- /dev/null +++ b/tests/baselines/reference/jsdocDisallowedInTypescript.errors.txt @@ -0,0 +1,65 @@ +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(2,10): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(4,15): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(4,27): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(7,20): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(10,18): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(11,12): error TS2554: Expected 1 arguments, but got 2. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(13,14): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(14,11): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(15,8): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(16,15): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(17,11): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(18,17): error TS8020: JSDoc types can only be used inside documentation comments. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(19,5): error TS2322: Type 'undefined' is not assignable to type 'number | null'. +tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts(19,17): error TS8020: JSDoc types can only be used inside documentation comments. + + +==== tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts (14 errors) ==== + // grammar error from checker + var ara: Array. = [1,2,3]; + ~~~~~~~~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + + function f(x: ?number, y: Array.) { + ~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + ~~~~~~~~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + return x ? x + y[1] : y[0]; + } + function hof(ctor: function(new: number, string)) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + return new ctor('hi'); + } + function hof2(f: function(this: number, string): string) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + return f(12, 'hullo'); + ~~~~~~~~~~~~~~ +!!! error TS2554: Expected 1 arguments, but got 2. + } + var whatevs: * = 1001; + ~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + var ques: ? = 'what'; + ~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + var g: function(number, number): number = (n,m) => n + m; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + var variadic: ...boolean = [true, false, true]; + ~~~~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + var most: !string = 'definite'; + ~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + var postfixdef: number! = 101; + ~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + var postfixopt: number? = undefined; + ~~~~~~~~~~ +!!! error TS2322: Type 'undefined' is not assignable to type 'number | null'. + ~~~~~~~ +!!! error TS8020: JSDoc types can only be used inside documentation comments. + \ No newline at end of file diff --git a/tests/baselines/reference/jsdocInTypescript.js b/tests/baselines/reference/jsdocDisallowedInTypescript.js similarity index 84% rename from tests/baselines/reference/jsdocInTypescript.js rename to tests/baselines/reference/jsdocDisallowedInTypescript.js index 665707e15d1..2785eca2073 100644 --- a/tests/baselines/reference/jsdocInTypescript.js +++ b/tests/baselines/reference/jsdocDisallowedInTypescript.js @@ -1,4 +1,4 @@ -//// [jsdocInTypescript.ts] +//// [jsdocDisallowedInTypescript.ts] // grammar error from checker var ara: Array. = [1,2,3]; @@ -16,13 +16,11 @@ var ques: ? = 'what'; var g: function(number, number): number = (n,m) => n + m; var variadic: ...boolean = [true, false, true]; var most: !string = 'definite'; -var weird1: new:string = {}; -var weird2: this:string = {}; var postfixdef: number! = 101; var postfixopt: number? = undefined; -//// [jsdocInTypescript.js] +//// [jsdocDisallowedInTypescript.js] "use strict"; // grammar error from checker var ara = [1, 2, 3]; @@ -40,7 +38,5 @@ var ques = 'what'; var g = function (n, m) { return n + m; }; var variadic = [true, false, true]; var most = 'definite'; -var weird1 = {}; -var weird2 = {}; var postfixdef = 101; var postfixopt = undefined; diff --git a/tests/baselines/reference/jsdocInTypescript.errors.txt b/tests/baselines/reference/jsdocInTypescript.errors.txt deleted file mode 100644 index d1d6f404e15..00000000000 --- a/tests/baselines/reference/jsdocInTypescript.errors.txt +++ /dev/null @@ -1,85 +0,0 @@ -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(2,10): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(4,15): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(4,27): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(7,20): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(7,32): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(10,18): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(10,31): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(11,12): error TS2554: Expected 1 arguments, but got 2. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(13,14): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(14,11): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(15,8): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(16,15): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(17,11): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(18,5): error TS2322: Type '{}' is not assignable to type 'string'. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(18,16): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(19,5): error TS2322: Type '{}' is not assignable to type 'string'. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(19,17): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(20,17): error TS8020: JSDoc types can only be used inside documentation comments. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(21,5): error TS2322: Type 'undefined' is not assignable to type 'number | null'. -tests/cases/conformance/jsdoc/jsdocInTypescript.ts(21,17): error TS8020: JSDoc types can only be used inside documentation comments. - - -==== tests/cases/conformance/jsdoc/jsdocInTypescript.ts (20 errors) ==== - // grammar error from checker - var ara: Array. = [1,2,3]; - ~~~~~~~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - - function f(x: ?number, y: Array.) { - ~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - ~~~~~~~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - return x ? x + y[1] : y[0]; - } - function hof(ctor: function(new: number, string)) { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - ~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - return new ctor('hi'); - } - function hof2(f: function(this: number, string): string) { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - ~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - return f(12, 'hullo'); - ~~~~~~~~~~~~~~ -!!! error TS2554: Expected 1 arguments, but got 2. - } - var whatevs: * = 1001; - ~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var ques: ? = 'what'; - ~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var g: function(number, number): number = (n,m) => n + m; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var variadic: ...boolean = [true, false, true]; - ~~~~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var most: !string = 'definite'; - ~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var weird1: new:string = {}; - ~~~~~~ -!!! error TS2322: Type '{}' is not assignable to type 'string'. - ~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var weird2: this:string = {}; - ~~~~~~ -!!! error TS2322: Type '{}' is not assignable to type 'string'. - ~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var postfixdef: number! = 101; - ~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - var postfixopt: number? = undefined; - ~~~~~~~~~~ -!!! error TS2322: Type 'undefined' is not assignable to type 'number | null'. - ~~~~~~~ -!!! error TS8020: JSDoc types can only be used inside documentation comments. - \ No newline at end of file diff --git a/tests/baselines/reference/jsdocInTypescript2.errors.txt b/tests/baselines/reference/jsdocInTypescript2.errors.txt deleted file mode 100644 index 4616212c211..00000000000 --- a/tests/baselines/reference/jsdocInTypescript2.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -tests/cases/conformance/jsdoc/jsdocInTypescript2.ts(2,27): error TS1109: Expression expected. - - -==== tests/cases/conformance/jsdoc/jsdocInTypescript2.ts (1 errors) ==== - // parse error (blocks grammar errors from checker) - function parse1(n: number=) { } - ~ -!!! error TS1109: Expression expected. - \ No newline at end of file diff --git a/tests/baselines/reference/jsdocParseErrorsInTypescript.errors.txt b/tests/baselines/reference/jsdocParseErrorsInTypescript.errors.txt new file mode 100644 index 00000000000..655c27fb89c --- /dev/null +++ b/tests/baselines/reference/jsdocParseErrorsInTypescript.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/jsdoc/jsdocParseErrorsInTypescript.ts(2,27): error TS1109: Expression expected. + + +==== tests/cases/conformance/jsdoc/jsdocParseErrorsInTypescript.ts (1 errors) ==== + // parse error (blocks grammar errors from checker) + function parse1(n: number=) { } + ~ +!!! error TS1109: Expression expected. + \ No newline at end of file diff --git a/tests/baselines/reference/jsdocInTypescript2.js b/tests/baselines/reference/jsdocParseErrorsInTypescript.js similarity index 69% rename from tests/baselines/reference/jsdocInTypescript2.js rename to tests/baselines/reference/jsdocParseErrorsInTypescript.js index 0624d5af1d8..09fcae6e1b6 100644 --- a/tests/baselines/reference/jsdocInTypescript2.js +++ b/tests/baselines/reference/jsdocParseErrorsInTypescript.js @@ -1,9 +1,9 @@ -//// [jsdocInTypescript2.ts] +//// [jsdocParseErrorsInTypescript.ts] // parse error (blocks grammar errors from checker) function parse1(n: number=) { } -//// [jsdocInTypescript2.js] +//// [jsdocParseErrorsInTypescript.js] // parse error (blocks grammar errors from checker) function parse1(n) { if (n === void 0) { n = ; } diff --git a/tests/cases/conformance/jsdoc/jsdocInTypescript.ts b/tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts similarity index 90% rename from tests/cases/conformance/jsdoc/jsdocInTypescript.ts rename to tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts index fbe8982f891..62ad39491d1 100644 --- a/tests/cases/conformance/jsdoc/jsdocInTypescript.ts +++ b/tests/cases/conformance/jsdoc/jsdocDisallowedInTypescript.ts @@ -17,7 +17,5 @@ var ques: ? = 'what'; var g: function(number, number): number = (n,m) => n + m; var variadic: ...boolean = [true, false, true]; var most: !string = 'definite'; -var weird1: new:string = {}; -var weird2: this:string = {}; var postfixdef: number! = 101; var postfixopt: number? = undefined; diff --git a/tests/cases/conformance/jsdoc/jsdocInTypescript2.ts b/tests/cases/conformance/jsdoc/jsdocParseErrorsInTypescript.ts similarity index 100% rename from tests/cases/conformance/jsdoc/jsdocInTypescript2.ts rename to tests/cases/conformance/jsdoc/jsdocParseErrorsInTypescript.ts diff --git a/tests/cases/fourslash/completionInJSDocFunctionNew.ts b/tests/cases/fourslash/completionInJSDocFunctionNew.ts index 9e19964cd25..0d3391cf774 100644 --- a/tests/cases/fourslash/completionInJSDocFunctionNew.ts +++ b/tests/cases/fourslash/completionInJSDocFunctionNew.ts @@ -3,8 +3,8 @@ // @allowJs: true // @Filename: Foo.js /////** @type {function (new: string, string): string} */ -////var f = function (s) { return /**/; } +////var f = function () { return new/**/; } goTo.marker(); verify.completionListCount(115); -verify.completionListContains('new', 'new', '', 'keyword'); +verify.completionListContains('new'); diff --git a/tests/cases/fourslash/completionInJSDocFunctionThis.ts b/tests/cases/fourslash/completionInJSDocFunctionThis.ts index 3fe02825d4c..c28eeeb397f 100644 --- a/tests/cases/fourslash/completionInJSDocFunctionThis.ts +++ b/tests/cases/fourslash/completionInJSDocFunctionThis.ts @@ -2,8 +2,9 @@ // @allowJs: true // @Filename: Foo.js /////** @type {function (this: string, string): string} */ -////var f = function (s) { return /**/; } +////var f = function (s) { return this/**/; } goTo.marker(); -verify.completionListCount(115); +verify.completionListCount(116); verify.completionListContains('this'); + diff --git a/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts b/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts index e75040d1f77..b094714cefb 100644 --- a/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts +++ b/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts @@ -1,9 +1,8 @@ /// // @allowJs: true // @Filename: Foo.js -/////** @type {function ([|new|]: string, string): string} */ +/////** @type {function ([|{|"isWriteAccess": true, "isDefinition": true|}new|]: string, string): string} */ ////var f; const [a0] = test.ranges(); -// should be: verify.referenceGroups([a0], [{ definition: "new", ranges: [a0] }]); -verify.referenceGroups([a0], undefined); +verify.singleReferenceGroup("(parameter) new: string", [a0]);