Fix incorrectly detected arrow functions

Fixes #521
This commit is contained in:
Sheetal Nandi 2017-09-15 10:53:53 -07:00
Родитель 30d95ebb56
Коммит d0127499ba
5 изменённых файлов: 118 добавлений и 18 удалений

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

@ -68,7 +68,7 @@ repository:
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=>)
))
)) |
(:\s*(
@ -586,7 +586,7 @@ repository:
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=>)
))
)) |
(:\s*(
@ -793,7 +793,7 @@ repository:
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=>)
))
)) |
(:\s*(
@ -1508,7 +1508,7 @@ repository:
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=>)
))
))
captures:
@ -1626,7 +1626,7 @@ repository:
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
((<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=>)
))
)))
captures:
@ -1756,7 +1756,7 @@ repository:
# arrow function possible to detect only with => on same line
(
(<\s*[_$[:alpha:]\{\(]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(]([^=<>]|=[^<])+\>)+>\s*)? # typeparameters
\(([^()]|\([^()]*\))*\) # parameteres
\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\) # parameteres
(\s*:\s*(.)*)? # return type
\s*=> # arrow operator
)

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

@ -185,7 +185,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)) |
(:\s*(
@ -1820,7 +1820,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)) |
(:\s*(
@ -2447,7 +2447,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)) |
(:\s*(
@ -4158,7 +4158,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
))</string>
<key>captures</key>
@ -4454,7 +4454,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)))</string>
<key>captures</key>
@ -4797,7 +4797,7 @@
# arrow function possible to detect only with =&gt; on same line
(
(&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)? # typeparameters
\(([^()]|\([^()]*\))*\) # parameteres
\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\) # parameteres
(\s*:\s*(.)*)? # return type
\s*=&gt; # arrow operator
)

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

@ -185,7 +185,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)) |
(:\s*(
@ -1824,7 +1824,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)) |
(:\s*(
@ -2451,7 +2451,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)) |
(:\s*(
@ -4162,7 +4162,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
))</string>
<key>captures</key>
@ -4400,7 +4400,7 @@
((async\s*)?(
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
((&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\)(\s*:\s*(.)*)?\s*=&gt;)
))
)))</string>
<key>captures</key>
@ -4743,7 +4743,7 @@
# arrow function possible to detect only with =&gt; on same line
(
(&lt;\s*[_$[:alpha:]\{\(]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)? # typeparameters
\(([^()]|\([^()]*\))*\) # parameteres
\((\s*[_$[:alpha:]\{\(]([^()]|\((\s*[_$[:alpha:]\{\(]\{\(][^()]*)?\))*)?\) # parameteres
(\s*:\s*(.)*)? # return type
\s*=&gt; # arrow operator
)

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

@ -0,0 +1,98 @@
original file
-----------------------------------
const names = results.f(result.success ? (2) : 2).f(c => c.name)
const a = 1;
-----------------------------------
Grammar: TypeScript.tmLanguage
-----------------------------------
>const names = results.f(result.success ? (2) : 2).f(c => c.name)
^^^^^
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.readwrite.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.function-call.ts variable.other.object.ts
^
source.ts meta.var.expr.ts meta.function-call.ts punctuation.accessor.ts
^
source.ts meta.var.expr.ts meta.function-call.ts entity.name.function.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^^^^^^
source.ts meta.var.expr.ts variable.other.object.ts
^
source.ts meta.var.expr.ts punctuation.accessor.ts
^^^^^^^
source.ts meta.var.expr.ts variable.other.property.ts
^
source.ts meta.var.expr.ts
^
source.ts meta.var.expr.ts keyword.operator.ternary.ts
^
source.ts meta.var.expr.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts constant.numeric.decimal.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts
^
source.ts meta.var.expr.ts keyword.operator.ternary.ts
^
source.ts meta.var.expr.ts
^
source.ts meta.var.expr.ts constant.numeric.decimal.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts meta.function-call.ts punctuation.accessor.ts
^
source.ts meta.var.expr.ts meta.function-call.ts entity.name.function.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts meta.arrow.ts variable.parameter.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 variable.other.object.ts
^
source.ts meta.var.expr.ts punctuation.accessor.ts
^^^^
source.ts meta.var.expr.ts support.variable.property.dom.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts
>const a = 1;
^^^^^
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.readwrite.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 constant.numeric.decimal.ts
^
source.ts punctuation.terminator.statement.ts

2
tests/cases/Issue521.ts Normal file
Просмотреть файл

@ -0,0 +1,2 @@
const names = results.f(result.success ? (2) : 2).f(c => c.name)
const a = 1;