diff --git a/TypeScript.YAML-tmLanguage b/TypeScript.YAML-tmLanguage index 9dbd3037..8c6ea552 100644 --- a/TypeScript.YAML-tmLanguage +++ b/TypeScript.YAML-tmLanguage @@ -1205,21 +1205,25 @@ repository: patterns: - include: '#comment' #(default|*|name) as alias - - match: '{{startOfIdentifier}}(?:(\bdefault)|(\*)|(\b{{identifier}}))\s+(as)\s+(?:(default{{endOfIdentifier}})|({{identifier}}))' - captures: - '1': { name: keyword.control.default.ts } - '2': { name: constant.language.import-export-all.ts } - '3': { name: variable.other.readwrite.ts } - '4': { name: keyword.control.as.ts } - '5': { name: keyword.control.default.ts } - '6': { name: variable.other.readwrite.alias.ts } + - match: '{{startOfIdentifier}}(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b{{identifier}})))\s+(as)\s+(?:(default{{endOfIdentifier}})|({{identifier}}))' + captures: + '1': { name: keyword.control.type.ts } + '2': { name: keyword.control.default.ts } + '3': { name: constant.language.import-export-all.ts } + '4': { name: variable.other.readwrite.ts } + '5': { name: keyword.control.as.ts } + '6': { name: keyword.control.default.ts } + '7': { name: variable.other.readwrite.alias.ts } - include: '#punctuation-comma' - name: constant.language.import-export-all.ts match: \* - name: keyword.control.default.ts match: \b(default)\b - - name: variable.other.readwrite.alias.ts - match: ({{identifier}}) + - match: '(?:(\btype)\s+)?({{identifier}})' + captures: + '1': { name: keyword.control.type.ts } + '2': { name: variable.other.readwrite.alias.ts } + #control statements and loops switch-statement: diff --git a/TypeScript.tmLanguage b/TypeScript.tmLanguage index 705501c0..bec7dfda 100644 --- a/TypeScript.tmLanguage +++ b/TypeScript.tmLanguage @@ -3852,35 +3852,40 @@ match - (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)) + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)) captures 1 name - keyword.control.default.ts + keyword.control.type.ts 2 name - constant.language.import-export-all.ts + keyword.control.default.ts 3 name - variable.other.readwrite.ts + constant.language.import-export-all.ts 4 name - keyword.control.as.ts + variable.other.readwrite.ts 5 name - keyword.control.default.ts + keyword.control.as.ts 6 + + name + keyword.control.default.ts + + 7 name variable.other.readwrite.alias.ts @@ -3904,10 +3909,21 @@ \b(default)\b - name - variable.other.readwrite.alias.ts match - ([_$[:alpha:]][_$[:alnum:]]*) + (?:(\btype)\s+)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.control.type.ts + + 2 + + name + variable.other.readwrite.alias.ts + + diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage index 6e9369a7..77a345e7 100644 --- a/TypeScriptReact.tmLanguage +++ b/TypeScriptReact.tmLanguage @@ -3874,35 +3874,40 @@ match - (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)) + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)) captures 1 name - keyword.control.default.tsx + keyword.control.type.tsx 2 name - constant.language.import-export-all.tsx + keyword.control.default.tsx 3 name - variable.other.readwrite.tsx + constant.language.import-export-all.tsx 4 name - keyword.control.as.tsx + variable.other.readwrite.tsx 5 name - keyword.control.default.tsx + keyword.control.as.tsx 6 + + name + keyword.control.default.tsx + + 7 name variable.other.readwrite.alias.tsx @@ -3926,10 +3931,21 @@ \b(default)\b - name - variable.other.readwrite.alias.tsx match - ([_$[:alpha:]][_$[:alnum:]]*) + (?:(\btype)\s+)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.control.type.tsx + + 2 + + name + variable.other.readwrite.alias.tsx + + diff --git a/tests/baselines/importTypeOnly.baseline.txt b/tests/baselines/importTypeOnly.baseline.txt index abafaa73..9d863582 100644 --- a/tests/baselines/importTypeOnly.baseline.txt +++ b/tests/baselines/importTypeOnly.baseline.txt @@ -6,6 +6,14 @@ import type * as types from "mod"; import type from "mod"; import type = require("mod"); import type T = require("mod"); +import { type X } from "mod"; +import { X, type Y} from "mod"; +import type { type X } from "mod"; // grammar error +import { type as foo } from "mod"; // not type-only +import { type type } from "mod"; +import { type as as as } from "mod"; +import { type type as as } from "mod"; +import { type type as type } from "mod"; ----------------------------------- @@ -114,11 +122,11 @@ Grammar: TypeScript.tmLanguage ^ source.ts meta.import.ts ^^^^ - source.ts meta.import.ts variable.other.readwrite.alias.ts + source.ts meta.import.ts keyword.control.type.ts ^ source.ts meta.import.ts ^^^^ - source.ts meta.import.ts keyword.control.from.ts + source.ts meta.import.ts variable.other.readwrite.alias.ts ^ source.ts meta.import.ts ^ @@ -127,66 +135,366 @@ Grammar: TypeScript.tmLanguage source.ts meta.import.ts string.quoted.double.ts ^ source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts - ^ - source.ts punctuation.terminator.statement.ts + ^^ + source.ts meta.import.ts >import type = require("mod"); ^^^^^^ - source.ts meta.import-equals.external.ts keyword.control.import.ts + source.ts meta.import.ts variable.other.readwrite.alias.ts ^ - source.ts meta.import-equals.external.ts + source.ts meta.import.ts ^^^^ - source.ts meta.import-equals.external.ts variable.other.readwrite.alias.ts - ^ - source.ts meta.import-equals.external.ts - ^ - source.ts meta.import-equals.external.ts keyword.operator.assignment.ts - ^ - source.ts meta.import-equals.external.ts + source.ts meta.import.ts variable.other.readwrite.alias.ts + ^^^ + source.ts meta.import.ts ^^^^^^^ - source.ts meta.import-equals.external.ts keyword.control.require.ts + source.ts meta.import.ts variable.other.readwrite.alias.ts ^ - source.ts meta.import-equals.external.ts meta.brace.round.ts + source.ts meta.import.ts ^ - source.ts meta.import-equals.external.ts string.quoted.double.ts punctuation.definition.string.begin.ts + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts ^^^ - source.ts meta.import-equals.external.ts string.quoted.double.ts + source.ts meta.import.ts string.quoted.double.ts ^ - source.ts meta.import-equals.external.ts string.quoted.double.ts punctuation.definition.string.end.ts - ^ - source.ts meta.import-equals.external.ts meta.brace.round.ts - ^ - source.ts punctuation.terminator.statement.ts + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^^^ + source.ts meta.import.ts >import type T = require("mod"); ^^^^^^ - source.ts meta.import-equals.external.ts keyword.control.import.ts + source.ts meta.import.ts variable.other.readwrite.alias.ts ^ - source.ts meta.import-equals.external.ts + source.ts meta.import.ts ^^^^ - source.ts meta.import-equals.external.ts keyword.control.type.ts + source.ts meta.import.ts keyword.control.type.ts ^ - source.ts meta.import-equals.external.ts + source.ts meta.import.ts ^ - source.ts meta.import-equals.external.ts variable.other.readwrite.alias.ts - ^ - source.ts meta.import-equals.external.ts - ^ - source.ts meta.import-equals.external.ts keyword.operator.assignment.ts - ^ - source.ts meta.import-equals.external.ts + source.ts meta.import.ts variable.other.readwrite.alias.ts + ^^^ + source.ts meta.import.ts ^^^^^^^ - source.ts meta.import-equals.external.ts keyword.control.require.ts + source.ts meta.import.ts variable.other.readwrite.alias.ts ^ - source.ts meta.import-equals.external.ts meta.brace.round.ts + source.ts meta.import.ts ^ - source.ts meta.import-equals.external.ts string.quoted.double.ts punctuation.definition.string.begin.ts + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts ^^^ - source.ts meta.import-equals.external.ts string.quoted.double.ts + source.ts meta.import.ts string.quoted.double.ts ^ - source.ts meta.import-equals.external.ts string.quoted.double.ts punctuation.definition.string.end.ts + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^^^ + source.ts meta.import.ts +>import { type X } from "mod"; + ^^^^^^ + source.ts meta.import.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts keyword.control.type.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^ + source.ts punctuation.terminator.statement.ts +>import { X, type Y} from "mod"; + ^^^^^^ + source.ts meta.import.ts keyword.control.import.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.separator.comma.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts keyword.control.type.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts ^ - source.ts meta.import-equals.external.ts meta.brace.round.ts + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts ^ source.ts punctuation.terminator.statement.ts +>import type { type X } from "mod"; // grammar error + ^^^^^^ + source.ts meta.import.ts keyword.control.import.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.type.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts keyword.control.type.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^ + source.ts punctuation.terminator.statement.ts + ^ + source.ts + ^^ + source.ts comment.line.double-slash.ts punctuation.definition.comment.ts + ^^^^^^^^^^^^^^ + source.ts comment.line.double-slash.ts +>import { type as foo } from "mod"; // not type-only + ^^^^^^ + source.ts meta.import.ts keyword.control.import.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^ + source.ts meta.import.ts meta.block.ts keyword.control.as.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^ + source.ts punctuation.terminator.statement.ts + ^ + source.ts + ^^ + source.ts comment.line.double-slash.ts punctuation.definition.comment.ts + ^^^^^^^^^^^^^^ + source.ts comment.line.double-slash.ts +>import { type type } from "mod"; + ^^^^^^ + source.ts meta.import.ts keyword.control.import.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts keyword.control.type.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^ + source.ts punctuation.terminator.statement.ts +>import { type as as as } from "mod"; + ^^^^^^ + source.ts meta.import.ts keyword.control.import.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts keyword.control.type.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^ + source.ts meta.import.ts meta.block.ts keyword.control.as.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^ + source.ts punctuation.terminator.statement.ts +>import { type type as as } from "mod"; + ^^^^^^ + source.ts meta.import.ts keyword.control.import.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts keyword.control.type.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^ + source.ts meta.import.ts meta.block.ts keyword.control.as.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^ + source.ts punctuation.terminator.statement.ts +>import { type type as type } from "mod"; + ^^^^^^ + source.ts meta.import.ts keyword.control.import.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts keyword.control.type.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^ + source.ts meta.import.ts meta.block.ts keyword.control.as.ts + ^ + source.ts meta.import.ts meta.block.ts + ^^^^ + source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts + ^ + source.ts meta.import.ts meta.block.ts + ^ + source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts + ^ + source.ts meta.import.ts + ^^^^ + source.ts meta.import.ts keyword.control.from.ts + ^ + source.ts meta.import.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts + ^^^ + source.ts meta.import.ts string.quoted.double.ts + ^ + source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts + ^ + source.ts punctuation.terminator.statement.ts > ^ source.ts \ No newline at end of file diff --git a/tests/cases/importTypeOnly.ts b/tests/cases/importTypeOnly.ts index 9ae6b1d8..070ed705 100644 --- a/tests/cases/importTypeOnly.ts +++ b/tests/cases/importTypeOnly.ts @@ -4,3 +4,11 @@ import type * as types from "mod"; import type from "mod"; import type = require("mod"); import type T = require("mod"); +import { type X } from "mod"; +import { X, type Y} from "mod"; +import type { type X } from "mod"; // grammar error +import { type as foo } from "mod"; // not type-only +import { type type } from "mod"; +import { type as as as } from "mod"; +import { type type as as } from "mod"; +import { type type as type } from "mod";