fix  #3629
This commit is contained in:
Timothee Guerin 2024-07-08 10:27:00 -07:00 коммит произвёл GitHub
Родитель 1cc570c72f
Коммит 7900f29d65
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
5 изменённых файлов: 39 добавлений и 1 удалений

Просмотреть файл

@ -0,0 +1,7 @@
---
changeKind: fix
packages:
- "@typespec/compiler"
---
Fix semantic highlighting of using of single namespace

Просмотреть файл

@ -1623,6 +1623,9 @@
},
{
"include": "#identifier-expression"
},
{
"include": "#punctuation-accessor"
}
]
},

Просмотреть файл

@ -219,6 +219,11 @@ export function getSemanticTokens(ast: TypeSpecScriptNode): SemanticToken[] {
case SyntaxKind.ScalarConstructor:
classify(node.id, SemanticTokenKind.Function);
break;
case SyntaxKind.UsingStatement:
if (node.name.kind === SyntaxKind.Identifier) {
classify(node.name, SemanticTokenKind.Namespace);
}
break;
case SyntaxKind.EnumStatement:
classify(node.id, SemanticTokenKind.Enum);
break;

Просмотреть файл

@ -879,7 +879,7 @@ const usingStatement: BeginEndRule = {
"1": { scope: "keyword.other.tsp" },
},
end: universalEnd,
patterns: [token, identifierExpression],
patterns: [token, identifierExpression, punctuationAccessor],
};
const decoratorDeclarationStatement: BeginEndRule = {

Просмотреть файл

@ -53,6 +53,7 @@ const Token = {
valueof: createToken("valueof", "keyword.other.tsp"),
typeof: createToken("typeof", "keyword.other.tsp"),
const: createToken("const", "keyword.other.tsp"),
using: createToken("using", "keyword.other.tsp"),
other: (text: string) => createToken(text, "keyword.other.tsp"),
},
@ -255,6 +256,28 @@ function testColorization(description: string, tokenize: Tokenize) {
});
});
describe("using", () => {
it("single namespace", async () => {
const tokens = await tokenize("using foo;");
deepStrictEqual(tokens, [
Token.keywords.using,
Token.identifiers.type("foo"),
Token.punctuation.semicolon,
]);
});
it("nested namespace", async () => {
const tokens = await tokenize("using foo.bar;");
deepStrictEqual(tokens, [
Token.keywords.using,
Token.identifiers.type("foo"),
Token.punctuation.accessor,
Token.identifiers.type("bar"),
Token.punctuation.semicolon,
]);
});
});
describe("aliases", () => {
it("simple alias", async () => {
const tokens = await tokenize("alias Foo = string");