diff --git a/TypeScript.YAML-tmLanguage b/TypeScript.YAML-tmLanguage index fd02e2ba..43b38fb0 100644 --- a/TypeScript.YAML-tmLanguage +++ b/TypeScript.YAML-tmLanguage @@ -2332,8 +2332,8 @@ repository: - include: '#type-parameters' - include: '#type-tuple' - include: '#type-object' - - include: '#type-conditional' - include: '#type-operators' + - include: '#type-conditional' - include: '#type-fn-type-parameters' - include: '#type-paren-or-function-parameters' - include: '#type-function-return-type' @@ -2519,6 +2519,7 @@ repository: type-operators: patterns: - include: '#typeof-operator' + - include: '#type-infer' # Handle the object types followed by | or & operator as { can be used as end of Type in many places and this avoids tripping that - begin: ([&|])(?=\s*\{) beginCaptures: @@ -2536,11 +2537,30 @@ repository: match: '{{startOfIdentifier}}keyof{{endOfIdentifier}}' - name: keyword.operator.ternary.ts match: (\?|\:) - - name: keyword.operator.expression.infer.ts - match: '{{startOfIdentifier}}infer(?=\s+[_$[:alpha:]])' - name: keyword.operator.expression.import.ts match: '{{startOfIdentifier}}import(?=\s*\()' + type-infer: + patterns: + # try to match infer..extends on a single line + - match: '{{startOfIdentifier}}(infer)\s+({{identifier}})\s+(extends){{endOfIdentifier}}' + name: meta.type.infer.ts + captures: + '1': { name: keyword.operator.expression.infer.ts } + '2': { name: entity.name.type.ts } + '3': { name: keyword.operator.expression.extends.ts } + # alternatively, match across multiple lines + - begin: '{{startOfIdentifier}}infer(?=\s+[_$[:alpha:]])' + beginCaptures: + '0': { name: keyword.operator.expression.infer.ts } + end: '(?=[;),}\]:?\-\+\>''"`|&]|\|\||\&\&|\!\=\=)' + name: meta.type.infer.ts + patterns: + - name: keyword.operator.expression.extends.ts + match: '{{startOfIdentifier}}extends{{endOfIdentifier}}' + - name: entity.name.type.ts + match: '{{startOfIdentifier}}{{identifier}}{{endOfIdentifier}}' + type-predicate-operator: patterns: - match: '{{startOfIdentifier}}(?:(asserts)\s+)?(?!asserts)(?:(this)|({{identifier}}))\s(is){{endOfIdentifier}}' diff --git a/TypeScript.tmLanguage b/TypeScript.tmLanguage index 78bfc806..a9d8f957 100644 --- a/TypeScript.tmLanguage +++ b/TypeScript.tmLanguage @@ -7076,11 +7076,11 @@ include - #type-conditional + #type-operators include - #type-operators + #type-conditional include @@ -7630,6 +7630,10 @@ include #typeof-operator + + include + #type-infer + begin ([&|])(?=\s*\{) @@ -7679,15 +7683,70 @@ name - keyword.operator.expression.infer.ts + keyword.operator.expression.import.ts match - (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]]) + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\() + + + type-infer + + patterns + - name - keyword.operator.expression.import.ts match - (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\() + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + name + meta.type.infer.ts + captures + + 1 + + name + keyword.operator.expression.infer.ts + + 2 + + name + entity.name.type.ts + + 3 + + name + keyword.operator.expression.extends.ts + + + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]]) + beginCaptures + + 0 + + name + keyword.operator.expression.infer.ts + + + end + (?=[;),}\]:?\-\+\>'"`|&]|\|\||\&\&|\!\=\=) + name + meta.type.infer.ts + patterns + + + name + keyword.operator.expression.extends.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))extends(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + entity.name.type.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))[_$[:alpha:]][_$[:alnum:]]*(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage index 43477c9e..cb2265e6 100644 --- a/TypeScriptReact.tmLanguage +++ b/TypeScriptReact.tmLanguage @@ -7024,11 +7024,11 @@ include - #type-conditional + #type-operators include - #type-operators + #type-conditional include @@ -7578,6 +7578,10 @@ include #typeof-operator + + include + #type-infer + begin ([&|])(?=\s*\{) @@ -7627,15 +7631,70 @@ name - keyword.operator.expression.infer.tsx + keyword.operator.expression.import.tsx match - (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]]) + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\() + + + type-infer + + patterns + - name - keyword.operator.expression.import.tsx match - (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\() + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + name + meta.type.infer.tsx + captures + + 1 + + name + keyword.operator.expression.infer.tsx + + 2 + + name + entity.name.type.tsx + + 3 + + name + keyword.operator.expression.extends.tsx + + + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]]) + beginCaptures + + 0 + + name + keyword.operator.expression.infer.tsx + + + end + (?=[;),}\]:?\-\+\>'"`|&]|\|\||\&\&|\!\=\=) + name + meta.type.infer.tsx + patterns + + + name + keyword.operator.expression.extends.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))extends(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + entity.name.type.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))[_$[:alpha:]][_$[:alnum:]]*(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + diff --git a/package-lock.json b/package-lock.json index 170a8ab6..2dbe35c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "mocha": "latest", "plist": "latest", "typescript": "latest", + "vscode-grammar-updater": "^1.0.4", "vscode-textmate": "^4.1.1" }, "devDependencies": { @@ -264,6 +265,19 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -486,6 +500,14 @@ "node": ">=4.8" } }, + "node_modules/cson-parser": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz", + "integrity": "sha1-fsZ14DkUVTO/KmqFYHPxWZ2cLSQ=", + "dependencies": { + "coffee-script": "^1.10.0" + } + }, "node_modules/debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -548,6 +570,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/fast-plist": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.2.tgz", + "integrity": "sha1-pFr/NFGWAG1AbKbNzQX2kFHvNbg=" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1398,6 +1425,18 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "node_modules/vscode-grammar-updater": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vscode-grammar-updater/-/vscode-grammar-updater-1.0.4.tgz", + "integrity": "sha512-WjmpFo+jlnxOfHNeSrO3nJx8S2u3f926UL0AHJhDMQghCwEfkMvf37aafF83xvtLW2G9ywhifLbq4caxDQm+wQ==", + "dependencies": { + "cson-parser": "^1.3.3", + "fast-plist": "0.1.2" + }, + "bin": { + "vscode-grammar-updater": "bin.js" + } + }, "node_modules/vscode-textmate": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-4.1.1.tgz", @@ -1729,6 +1768,11 @@ "wrap-ansi": "^7.0.0" } }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1906,6 +1950,14 @@ "which": "^1.2.9" } }, + "cson-parser": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz", + "integrity": "sha1-fsZ14DkUVTO/KmqFYHPxWZ2cLSQ=", + "requires": { + "coffee-script": "^1.10.0" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -1949,6 +2001,11 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, + "fast-plist": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.2.tgz", + "integrity": "sha1-pFr/NFGWAG1AbKbNzQX2kFHvNbg=" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2573,6 +2630,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "vscode-grammar-updater": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vscode-grammar-updater/-/vscode-grammar-updater-1.0.4.tgz", + "integrity": "sha512-WjmpFo+jlnxOfHNeSrO3nJx8S2u3f926UL0AHJhDMQghCwEfkMvf37aafF83xvtLW2G9ywhifLbq4caxDQm+wQ==", + "requires": { + "cson-parser": "^1.3.3", + "fast-plist": "0.1.2" + } + }, "vscode-textmate": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-4.1.1.tgz", diff --git a/tests/baselines/inferTypes.baseline.txt b/tests/baselines/inferTypes.baseline.txt index 706c2d09..4740a3b3 100644 --- a/tests/baselines/inferTypes.baseline.txt +++ b/tests/baselines/inferTypes.baseline.txt @@ -4,6 +4,9 @@ type ReturnType = T extends ((...args: any[]) => infer R) | type ArgumentType any> = T extends (a: infer A) => any ? A : any; type X1 = T extends { x: infer X, y: infer Y } ? [X, Y] : any; type B1 = S extends A1 ? [T, U] : never; +type C1 = S extends A1 ? [T, U] : never; +type C2 = S extends infer T + extends number ? T : never; ----------------------------------- Grammar: TypeScript.tmLanguage @@ -70,11 +73,11 @@ Grammar: TypeScript.tmLanguage ^ source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts ^^^^^ - source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts + source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.brace.round.ts ^ @@ -114,11 +117,11 @@ Grammar: TypeScript.tmLanguage ^ source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts ^^^^^ - source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts + source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.type.function.return.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts meta.type.paren.cover.ts meta.brace.round.ts ^ @@ -201,11 +204,11 @@ Grammar: TypeScript.tmLanguage ^ source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts ^^^^^ - source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts + source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts ^ @@ -306,11 +309,11 @@ Grammar: TypeScript.tmLanguage ^ source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts ^^^^^ - source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts + source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts meta.object.type.ts punctuation.separator.comma.ts ^ @@ -322,13 +325,13 @@ Grammar: TypeScript.tmLanguage ^ source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts ^^^^^ - source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts + source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.infer.ts entity.name.type.ts ^ - source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts + source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.infer.ts ^ source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts ^ @@ -391,21 +394,21 @@ Grammar: TypeScript.tmLanguage ^ source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts ^^^^^ - source.ts meta.type.declaration.ts meta.type.parameters.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.parameters.ts + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.separator.comma.ts ^ source.ts meta.type.declaration.ts meta.type.parameters.ts ^^^^^ - source.ts meta.type.declaration.ts meta.type.parameters.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.parameters.ts + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts ^ @@ -435,4 +438,157 @@ Grammar: TypeScript.tmLanguage ^^^^^ source.ts meta.type.declaration.ts support.type.primitive.ts ^ - source.ts punctuation.terminator.statement.ts \ No newline at end of file + source.ts punctuation.terminator.statement.ts +>type C1 = S extends A1 ? [T, U] : never; + ^^^^ + source.ts meta.type.declaration.ts storage.type.type.ts + ^ + source.ts meta.type.declaration.ts + ^^ + source.ts meta.type.declaration.ts entity.name.type.alias.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts keyword.operator.assignment.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts + ^^^^^^^ + source.ts meta.type.declaration.ts storage.modifier.ts + ^ + source.ts meta.type.declaration.ts + ^^ + source.ts meta.type.declaration.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts + ^^^^^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts keyword.operator.expression.infer.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts + ^^^^^^^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts keyword.operator.expression.extends.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts + ^^^^^^ + source.ts meta.type.declaration.ts meta.type.parameters.ts support.type.primitive.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.separator.comma.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts + ^^^^^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts keyword.operator.expression.infer.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts + ^^^^^^^ + source.ts meta.type.declaration.ts meta.type.parameters.ts meta.type.infer.ts keyword.operator.expression.extends.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts + ^^^^^^ + source.ts meta.type.declaration.ts meta.type.parameters.ts support.type.primitive.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts keyword.operator.ternary.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts meta.type.tuple.ts meta.brace.square.ts + ^ + source.ts meta.type.declaration.ts meta.type.tuple.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.tuple.ts punctuation.separator.comma.ts + ^ + source.ts meta.type.declaration.ts meta.type.tuple.ts + ^ + source.ts meta.type.declaration.ts meta.type.tuple.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.tuple.ts meta.brace.square.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts keyword.operator.ternary.ts + ^ + source.ts meta.type.declaration.ts + ^^^^^ + source.ts meta.type.declaration.ts support.type.primitive.ts + ^ + source.ts punctuation.terminator.statement.ts +>type C2 = S extends infer T + ^^^^ + source.ts meta.type.declaration.ts storage.type.type.ts + ^ + source.ts meta.type.declaration.ts + ^^ + source.ts meta.type.declaration.ts entity.name.type.alias.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts keyword.operator.assignment.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts + ^^^^^^^ + source.ts meta.type.declaration.ts storage.modifier.ts + ^ + source.ts meta.type.declaration.ts + ^^^^^ + source.ts meta.type.declaration.ts meta.type.infer.ts keyword.operator.expression.infer.ts + ^ + source.ts meta.type.declaration.ts meta.type.infer.ts + ^ + source.ts meta.type.declaration.ts meta.type.infer.ts entity.name.type.ts +> extends number ? T : never; + ^^^^ + source.ts meta.type.declaration.ts meta.type.infer.ts + ^^^^^^^ + source.ts meta.type.declaration.ts meta.type.infer.ts keyword.operator.expression.extends.ts + ^ + source.ts meta.type.declaration.ts meta.type.infer.ts + ^^^^^^ + source.ts meta.type.declaration.ts meta.type.infer.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts meta.type.infer.ts + ^ + source.ts meta.type.declaration.ts keyword.operator.ternary.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts entity.name.type.ts + ^ + source.ts meta.type.declaration.ts + ^ + source.ts meta.type.declaration.ts keyword.operator.ternary.ts + ^ + source.ts meta.type.declaration.ts + ^^^^^ + source.ts meta.type.declaration.ts support.type.primitive.ts + ^ + source.ts punctuation.terminator.statement.ts \ No newline at end of file diff --git a/tests/baselines/templateLiteralType.baseline.txt b/tests/baselines/templateLiteralType.baseline.txt index f9589afb..c074a2c3 100644 --- a/tests/baselines/templateLiteralType.baseline.txt +++ b/tests/baselines/templateLiteralType.baseline.txt @@ -1086,11 +1086,11 @@ Grammar: TypeScript.tmLanguage ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^ @@ -1098,11 +1098,11 @@ Grammar: TypeScript.tmLanguage ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^ @@ -1348,31 +1348,31 @@ Grammar: TypeScript.tmLanguage ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^ @@ -1709,11 +1709,11 @@ Grammar: TypeScript.tmLanguage ^^^ source.ts meta.type.declaration.ts meta.type.tuple.ts keyword.operator.rest.ts ^^^^^ - source.ts meta.type.declaration.ts meta.type.tuple.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts meta.type.tuple.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.tuple.ts + source.ts meta.type.declaration.ts meta.type.tuple.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts meta.type.tuple.ts entity.name.type.ts + source.ts meta.type.declaration.ts meta.type.tuple.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts meta.type.tuple.ts meta.brace.square.ts ^ @@ -2061,11 +2061,11 @@ Grammar: TypeScript.tmLanguage ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^^ @@ -2077,11 +2077,11 @@ Grammar: TypeScript.tmLanguage ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^ @@ -2415,11 +2415,11 @@ Grammar: TypeScript.tmLanguage ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^ @@ -2427,11 +2427,11 @@ Grammar: TypeScript.tmLanguage ^^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.begin.ts ^^^^^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts keyword.operator.expression.infer.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts keyword.operator.expression.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts ^ - source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts entity.name.type.ts + source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts meta.embedded.line.ts meta.type.infer.ts entity.name.type.ts ^ source.ts meta.type.declaration.ts string.template.ts meta.template.expression.ts punctuation.definition.template-expression.end.ts ^ diff --git a/tests/cases/inferTypes.ts b/tests/cases/inferTypes.ts index 7a74507b..52433947 100644 --- a/tests/cases/inferTypes.ts +++ b/tests/cases/inferTypes.ts @@ -1,4 +1,7 @@ type ReturnType = T extends ((...args: any[]) => infer R) | (new (...args: any[]) => infer R) ? R : any; type ArgumentType any> = T extends (a: infer A) => any ? A : any; type X1 = T extends { x: infer X, y: infer Y } ? [X, Y] : any; -type B1 = S extends A1 ? [T, U] : never; \ No newline at end of file +type B1 = S extends A1 ? [T, U] : never; +type C1 = S extends A1 ? [T, U] : never; +type C2 = S extends infer T + extends number ? T : never; \ No newline at end of file