From 4407e8d57037cdb02e5fb670bcf318e0daebb40f Mon Sep 17 00:00:00 2001 From: Matt Bierner <matb@microsoft.com> Date: Tue, 21 Aug 2018 10:23:27 +0200 Subject: [PATCH 1/4] Allow _ in jsx attribute names Fixes #648 --- TypeScriptReact.YAML-tmLanguage | 4 +- TypeScriptReact.tmLanguage | 22 +++--- tests/baselines/Issues648.baseline.txt | 103 +++++++++++++++++++++++++ tests/cases/Issues648.tsx | 5 ++ 4 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 tests/baselines/Issues648.baseline.txt create mode 100644 tests/cases/Issues648.tsx diff --git a/TypeScriptReact.YAML-tmLanguage b/TypeScriptReact.YAML-tmLanguage index bdad7a02..a22453b9 100644 --- a/TypeScriptReact.YAML-tmLanguage +++ b/TypeScriptReact.YAML-tmLanguage @@ -11,7 +11,7 @@ uuid: 805375ec-d614-41f5-8993-5843fe63ea82 variables: #possiblyMultilineArrowExpressionBeforeEndOfLine: ({{typeParameters}})?\( possiblyMultilineArrow: ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) # during lookup treat ( followed by line end as arrow - jsxTagOrAtrributeIdentifier: '[_$[:alpha:]][-$[:alnum:].]*' + jsxTagOrAtrributeIdentifier: '[_$[:alpha:]][-_$[:alnum:].]*' jsxTagNamespace: (?:({{jsxTagOrAtrributeIdentifier}})(?<!\.|-)(:))? jsxTagName: \s*{{jsxTagNamespace}}((?:[a-z][a-z0-9]*|({{jsxTagOrAtrributeIdentifier}}))(?<!\.|-)) jsxOpeningTagWithoutAttributes: (<){{jsxTagName}}?\s*(>) @@ -164,7 +164,7 @@ repository: (?x) \s* (?:({{jsxTagOrAtrributeIdentifier}})(:))? - ([_$[:alpha:]][-$[:alnum:]]*) + ([_$[:alpha:]][-_$[:alnum:]]*) (?=\s|=|/?>|/\*|//) captures: '1': {name: entity.other.attribute-name.namespace.tsx} diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage index 8be6dc1d..7ce893f5 100644 --- a/TypeScriptReact.tmLanguage +++ b/TypeScriptReact.tmLanguage @@ -8317,9 +8317,9 @@ <key>jsx-tag-without-attributes-in-expression</key> <dict> <key>begin</key> - <string>(?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))</string> + <string>(?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>))</string> <key>end</key> - <string>(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))</string> + <string>(?!(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>))</string> <key>patterns</key> <array> <dict> @@ -8333,9 +8333,9 @@ <key>name</key> <string>meta.tag.without-attributes.tsx</string> <key>begin</key> - <string>(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>)</string> + <string>(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>)</string> <key>end</key> - <string>(</)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>)</string> + <string>(</)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>)</string> <key>beginCaptures</key> <dict> <key>1</key> @@ -8418,9 +8418,9 @@ <string>(?x) (?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s* (?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow - (?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))</string> + (?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))</string> <key>end</key> - <string>(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))</string> + <string>(?!(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))</string> <key>patterns</key> <array> <dict> @@ -8434,9 +8434,9 @@ <key>name</key> <string>meta.tag.tsx</string> <key>begin</key> - <string>(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))</string> + <string>(?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))</string> <key>end</key> - <string>(/>)|(?:(</)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))</string> + <string>(/>)|(?:(</)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>))</string> <key>endCaptures</key> <dict> <key>1</key> @@ -8479,7 +8479,7 @@ <array> <dict> <key>begin</key> - <string>(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)</string> + <string>(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)</string> <key>beginCaptures</key> <dict> <key>1</key> @@ -8681,8 +8681,8 @@ <key>match</key> <string>(?x) \s* - (?:([_$[:alpha:]][-$[:alnum:].]*)(:))? - ([_$[:alpha:]][-$[:alnum:]]*) + (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))? + ([_$[:alpha:]][-_$[:alnum:]]*) (?=\s|=|/?>|/\*|//)</string> <key>captures</key> <dict> diff --git a/tests/baselines/Issues648.baseline.txt b/tests/baselines/Issues648.baseline.txt new file mode 100644 index 00000000..b625bc3d --- /dev/null +++ b/tests/baselines/Issues648.baseline.txt @@ -0,0 +1,103 @@ +original file +----------------------------------- +<Test + a='' + b_c='111' + d='' +/> +----------------------------------- + +Grammar: TypeScriptReact.tmLanguage +----------------------------------- +><Test + ^ + source.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx + ^^^^ + source.tsx meta.tag.tsx entity.name.tag.tsx support.class.component.tsx +> a='' + ^^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx +> b_c='111' + ^^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx + ^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx + ^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx +> d='' + ^^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx +>/> + ^^ + source.tsx meta.tag.tsx punctuation.definition.tag.end.tsx + + +Grammar: TypeScript.tmLanguage +----------------------------------- +><Test + ^ + source.ts keyword.operator.relational.ts + ^^^^ + source.ts variable.other.readwrite.ts +> a='' + ^^^^ + source.ts + ^ + source.ts variable.other.readwrite.ts + ^ + source.ts keyword.operator.assignment.ts + ^ + source.ts string.quoted.single.ts punctuation.definition.string.begin.ts + ^ + source.ts string.quoted.single.ts punctuation.definition.string.end.ts +> b_c='111' + ^^^^ + source.ts + ^^^ + source.ts variable.other.readwrite.ts + ^ + source.ts keyword.operator.assignment.ts + ^ + source.ts string.quoted.single.ts punctuation.definition.string.begin.ts + ^^^ + source.ts string.quoted.single.ts + ^ + source.ts string.quoted.single.ts punctuation.definition.string.end.ts +> d='' + ^^^^ + source.ts + ^ + source.ts variable.other.readwrite.ts + ^ + source.ts keyword.operator.assignment.ts + ^ + source.ts string.quoted.single.ts punctuation.definition.string.begin.ts + ^ + source.ts string.quoted.single.ts punctuation.definition.string.end.ts +>/> + ^ + source.ts keyword.operator.arithmetic.ts + ^ + source.ts keyword.operator.relational.ts \ No newline at end of file diff --git a/tests/cases/Issues648.tsx b/tests/cases/Issues648.tsx new file mode 100644 index 00000000..7c659659 --- /dev/null +++ b/tests/cases/Issues648.tsx @@ -0,0 +1,5 @@ +<Test + a='' + b_c='111' + d='' +/> \ No newline at end of file From 1004a7be9ecbf41267588e879a4342b7fa3674b4 Mon Sep 17 00:00:00 2001 From: Matt Bierner <matb@microsoft.com> Date: Wed, 22 Aug 2018 10:22:28 +0200 Subject: [PATCH 2/4] Add tests for #649 Fixes #649 --- tests/baselines/Issues649.baseline.txt | 60 ++++++++++++++++++++++++++ tests/cases/Issues649.tsx | 6 +++ 2 files changed, 66 insertions(+) create mode 100644 tests/baselines/Issues649.baseline.txt create mode 100644 tests/cases/Issues649.tsx diff --git a/tests/baselines/Issues649.baseline.txt b/tests/baselines/Issues649.baseline.txt new file mode 100644 index 00000000..87c6ee62 --- /dev/null +++ b/tests/baselines/Issues649.baseline.txt @@ -0,0 +1,60 @@ +original file +----------------------------------- +// @onlyOwnGrammar - As this has jsx +<Test_Component + a='' + b_c='111' + d='' +/> +----------------------------------- + +Grammar: TypeScriptReact.tmLanguage +----------------------------------- +>// @onlyOwnGrammar - As this has jsx + ^^ + source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + source.tsx comment.line.double-slash.tsx +><Test_Component + ^ + source.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx + ^^^^^^^^^^^^^^ + source.tsx meta.tag.tsx entity.name.tag.tsx support.class.component.tsx +> a='' + ^^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx +> b_c='111' + ^^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx + ^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx + ^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx +> d='' + ^^^^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx + ^ + source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx +>/> + ^^ + source.tsx meta.tag.tsx punctuation.definition.tag.end.tsx \ No newline at end of file diff --git a/tests/cases/Issues649.tsx b/tests/cases/Issues649.tsx new file mode 100644 index 00000000..7f0af9bb --- /dev/null +++ b/tests/cases/Issues649.tsx @@ -0,0 +1,6 @@ +// @onlyOwnGrammar - As this has jsx +<Test_Component + a='' + b_c='111' + d='' +/> \ No newline at end of file From 7cd136235708fb2e54b6385e42811ff059843b97 Mon Sep 17 00:00:00 2001 From: Matt Bierner <matb@microsoft.com> Date: Wed, 22 Aug 2018 10:22:45 +0200 Subject: [PATCH 3/4] Mark onlyOwnGrammar --- tests/baselines/Issues648.baseline.txt | 57 ++++---------------------- tests/cases/Issues648.tsx | 1 + 2 files changed, 8 insertions(+), 50 deletions(-) diff --git a/tests/baselines/Issues648.baseline.txt b/tests/baselines/Issues648.baseline.txt index b625bc3d..86f2decf 100644 --- a/tests/baselines/Issues648.baseline.txt +++ b/tests/baselines/Issues648.baseline.txt @@ -1,5 +1,6 @@ original file ----------------------------------- +// @onlyOwnGrammar - As this has jsx <Test a='' b_c='111' @@ -9,6 +10,11 @@ original file Grammar: TypeScriptReact.tmLanguage ----------------------------------- +>// @onlyOwnGrammar - As this has jsx + ^^ + source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + source.tsx comment.line.double-slash.tsx ><Test ^ source.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx @@ -51,53 +57,4 @@ Grammar: TypeScriptReact.tmLanguage source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx >/> ^^ - source.tsx meta.tag.tsx punctuation.definition.tag.end.tsx - - -Grammar: TypeScript.tmLanguage ------------------------------------ -><Test - ^ - source.ts keyword.operator.relational.ts - ^^^^ - source.ts variable.other.readwrite.ts -> a='' - ^^^^ - source.ts - ^ - source.ts variable.other.readwrite.ts - ^ - source.ts keyword.operator.assignment.ts - ^ - source.ts string.quoted.single.ts punctuation.definition.string.begin.ts - ^ - source.ts string.quoted.single.ts punctuation.definition.string.end.ts -> b_c='111' - ^^^^ - source.ts - ^^^ - source.ts variable.other.readwrite.ts - ^ - source.ts keyword.operator.assignment.ts - ^ - source.ts string.quoted.single.ts punctuation.definition.string.begin.ts - ^^^ - source.ts string.quoted.single.ts - ^ - source.ts string.quoted.single.ts punctuation.definition.string.end.ts -> d='' - ^^^^ - source.ts - ^ - source.ts variable.other.readwrite.ts - ^ - source.ts keyword.operator.assignment.ts - ^ - source.ts string.quoted.single.ts punctuation.definition.string.begin.ts - ^ - source.ts string.quoted.single.ts punctuation.definition.string.end.ts ->/> - ^ - source.ts keyword.operator.arithmetic.ts - ^ - source.ts keyword.operator.relational.ts \ No newline at end of file + source.tsx meta.tag.tsx punctuation.definition.tag.end.tsx \ No newline at end of file diff --git a/tests/cases/Issues648.tsx b/tests/cases/Issues648.tsx index 7c659659..b667837e 100644 --- a/tests/cases/Issues648.tsx +++ b/tests/cases/Issues648.tsx @@ -1,3 +1,4 @@ +// @onlyOwnGrammar - As this has jsx <Test a='' b_c='111' From 38aa945970705a8c01bff5bb0c64494abec3414d Mon Sep 17 00:00:00 2001 From: Matt Bierner <matb@microsoft.com> Date: Thu, 23 Aug 2018 10:33:08 +0200 Subject: [PATCH 4/4] Update tests --- tests/baselines/Issues648.baseline.txt | 2 +- tests/baselines/Issues649.baseline.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/baselines/Issues648.baseline.txt b/tests/baselines/Issues648.baseline.txt index 86f2decf..db5284ae 100644 --- a/tests/baselines/Issues648.baseline.txt +++ b/tests/baselines/Issues648.baseline.txt @@ -13,7 +13,7 @@ Grammar: TypeScriptReact.tmLanguage >// @onlyOwnGrammar - As this has jsx ^^ source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.tsx comment.line.double-slash.tsx ><Test ^ diff --git a/tests/baselines/Issues649.baseline.txt b/tests/baselines/Issues649.baseline.txt index 87c6ee62..f7035f55 100644 --- a/tests/baselines/Issues649.baseline.txt +++ b/tests/baselines/Issues649.baseline.txt @@ -13,7 +13,7 @@ Grammar: TypeScriptReact.tmLanguage >// @onlyOwnGrammar - As this has jsx ^^ source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.tsx comment.line.double-slash.tsx ><Test_Component ^