Skip to content

Commit

Permalink
Fix incorrect export declaration detection when export is not ending …
Browse files Browse the repository at this point in the history
…the word

Fixes #662
  • Loading branch information
sheetalkamat committed Sep 4, 2018
1 parent ca3cb4a commit 06edc77
Show file tree
Hide file tree
Showing 5 changed files with 198 additions and 3 deletions.
2 changes: 1 addition & 1 deletion TypeScript.YAML-tmLanguage
Original file line number Diff line number Diff line change
Expand Up @@ -1107,7 +1107,7 @@ repository:
- include: '#interface-declaration'
- include: '#expression'
- name: meta.export.ts
begin: '{{startOfIdentifier}}(export)(?!\s*:)((?=\s*[\{*])|((?=\s*{{identifier}}(\s|,))(?!\s*{{constructsAndModifiers}})))'
begin: '{{startOfIdentifier}}(export)\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*{{identifier}}(\s|,))(?!\s*{{constructsAndModifiers}})))'
beginCaptures:
'0': { name: keyword.control.export.ts }
end: (?=$|{{endOfStatement}})
Expand Down
2 changes: 1 addition & 1 deletion TypeScript.tmLanguage
Original file line number Diff line number Diff line change
Expand Up @@ -3581,7 +3581,7 @@
<key>name</key>
<string>meta.export.ts</string>
<key>begin</key>
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?!\s*:)((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b)))</string>
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b)))</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
Expand Down
2 changes: 1 addition & 1 deletion TypeScriptReact.tmLanguage
Original file line number Diff line number Diff line change
Expand Up @@ -3585,7 +3585,7 @@
<key>name</key>
<string>meta.export.tsx</string>
<key>begin</key>
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?!\s*:)((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b)))</string>
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b)))</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
Expand Down
182 changes: 182 additions & 0 deletions tests/baselines/Issue662.baseline.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
original file
-----------------------------------
const a = (() => {
let exports;
exports = {
x: {},
};
if (exports.x) {
console.log("");
}
});

// no highlighting
class C {}
function f() {}
-----------------------------------

Grammar: TypeScript.tmLanguage
-----------------------------------
>const a = (() => {
^^^^^
source.ts meta.var.expr.ts storage.type.ts
^
source.ts meta.var.expr.ts
^
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
^
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
^
source.ts meta.var.expr.ts keyword.operator.assignment.ts
^
source.ts meta.var.expr.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
^
source.ts meta.var.expr.ts meta.arrow.ts
^^
source.ts meta.var.expr.ts meta.arrow.ts storage.type.function.arrow.ts
^
source.ts meta.var.expr.ts meta.arrow.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
> let exports;
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
^^^^^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
> exports = {
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^^^^^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts support.type.object.module.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts keyword.operator.assignment.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts punctuation.definition.block.ts
> x: {},
^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts meta.object.member.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts meta.object.member.ts meta.objectliteral.ts punctuation.definition.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts meta.object.member.ts meta.objectliteral.ts punctuation.definition.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts punctuation.separator.comma.ts
> };
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.objectliteral.ts punctuation.definition.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
> if (exports.x) {
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts keyword.control.conditional.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
^^^^^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts support.type.object.module.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.accessor.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts support.variable.property.dom.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
> console.log("");
^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts
^^^^^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.function-call.ts support.class.console.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.function-call.ts punctuation.accessor.ts
^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.function-call.ts support.function.console.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts string.quoted.double.ts punctuation.definition.string.begin.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts string.quoted.double.ts punctuation.definition.string.end.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts punctuation.terminator.statement.ts
> }
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
>});
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts punctuation.terminator.statement.ts
>
^
source.ts
>// no highlighting
^^
source.ts comment.line.double-slash.ts punctuation.definition.comment.ts
^^^^^^^^^^^^^^^^
source.ts comment.line.double-slash.ts
>class C {}
^^^^^
source.ts meta.class.ts storage.type.class.ts
^
source.ts meta.class.ts
^
source.ts meta.class.ts entity.name.type.class.ts
^
source.ts meta.class.ts
^
source.ts meta.class.ts punctuation.definition.block.ts
^
source.ts meta.class.ts punctuation.definition.block.ts
>function f() {}
^^^^^^^^
source.ts meta.function.ts storage.type.function.ts
^
source.ts meta.function.ts
^
source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
^
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
^
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
^
source.ts meta.function.ts
^
source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
^
source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
13 changes: 13 additions & 0 deletions tests/cases/Issue662.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const a = (() => {
let exports;
exports = {
x: {},
};
if (exports.x) {
console.log("");
}
});

// no highlighting
class C {}
function f() {}

0 comments on commit 06edc77

Please sign in to comment.