diff --git a/syntax/basic/members.vim b/syntax/basic/members.vim index 27e10af4..90851c1b 100644 --- a/syntax/basic/members.vim +++ b/syntax/basic/members.vim @@ -5,7 +5,7 @@ syntax keyword typescriptConstructor contained constructor syntax cluster memberNextGroup contains=typescriptMemberOptionality,typescriptTypeAnnotation,@typescriptCallSignature -syntax match typescriptMember /\K\k*/ +syntax match typescriptMember /#\?\K\k*/ \ nextgroup=@memberNextGroup \ contained skipwhite diff --git a/syntax/common.vim b/syntax/common.vim index e9a49434..843e6f37 100644 --- a/syntax/common.vim +++ b/syntax/common.vim @@ -11,6 +11,8 @@ if main_syntax == 'typescript' || main_syntax == 'typescriptreact' setlocal iskeyword+=$ " syntax cluster htmlJavaScript contains=TOP endif +" For private field added from TypeScript 3.8 +setlocal iskeyword+=# " lowest priority on least used feature syntax match typescriptLabel /[a-zA-Z_$]\k*:/he=e-1 contains=typescriptReserved nextgroup=@typescriptStatement skipwhite skipempty diff --git a/test/syntax.vader b/test/syntax.vader index f2dffccc..458a07bf 100644 --- a/test/syntax.vader +++ b/test/syntax.vader @@ -613,3 +613,16 @@ Execute: AssertEqual 'typescriptSpecial', SyntaxAt(1, 12) AssertEqual 'typescriptTemplate', SyntaxAt(1, 14) AssertEqual 'typescriptTemplate', SyntaxAt(1, 17) + +Given typescript (private class instance field): + class C { + #abc = 10; + foo() { + this.#abc; + } + } +Execute: + " At '#' in '#abc' + AssertEqual 'typescriptMember', SyntaxAt(2, 3) + " At 'c' in '#abc' + AssertEqual 'typescriptMember', SyntaxAt(2, 6)