Skip to content

Commit a4a8b51

Browse files
committed
[patch] Grammars patched.
- Grammars for multi-line functions updated. Avoiding catastrophic backtracking.
1 parent 7225f7e commit a4a8b51

File tree

1 file changed

+98
-13
lines changed

1 file changed

+98
-13
lines changed

syntaxes/ps.tmLanguage.json

Lines changed: 98 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
{"include": "#comments"},
66
{"include": "#imports"},
77
{"include": "#strings"},
8+
{"include": "#hover_function_parameters"},
89
{"include": "#constants"},
10+
{"include": "#keywords"},
911
{"include": "#functions"},
12+
{"include": "#long_functions"},
13+
{"include": "#user_defined_functions"},
1014
{"include": "#types"},
11-
{"include": "#keywords"},
1215
{"include": "#variables"},
1316
{"include": "#operators"},
1417
{"include": "#parameters"}
@@ -913,7 +916,6 @@
913916
},
914917
"functions": {
915918
"patterns": [
916-
{"include": "#keywords"},
917919
{
918920
"match": "^\\s*\\b(indicator|library|strategy)(?=\\s*\\()",
919921
"name": "storage.type.class.ps"
@@ -947,7 +949,7 @@
947949
}
948950
},
949951
{
950-
"match": "(?<![\\.]\\s*)\\b(array|matrix)\\b(\\.)\\b(new)\\b\\s*(<)\\s*([a-zA-Z_][a-zA-Z0-9_\\.]*)\\s*(>)(?=\\s*\\()",
952+
"match": "(?<![\\.]\\s*)\\b(array|matrix)\\b(\\.)\\b(new)\\b\\s*(<)\\s*([a-zA-Z_][a-zA-Z0-9_\\.]*)\\b\\s*(>)(?=\\s*\\()",
951953
"captures": {
952954
"1": {
953955
"name": "support.function.ps"
@@ -1116,7 +1118,7 @@
11161118
}
11171119
},
11181120
{
1119-
"match": "(?<![\\.]\\s*)\\b(map)\\b(\\.)\\b(new)\\b\\s*(<)\\s*\\b(int|float|bool|string|color)\\b\\s*(\\,)\\s*\\b([a-zA-Z_][\\w\\.]*)\\b\\s*(>)(?=\\s*\\()",
1121+
"match": "(?<![\\.]\\s*)\\b(map)\\b(\\.)\\b(new)\\b\\s*(<)\\s*\\b([a-zA-Z_]+)\\b\\s*(\\,)\\s*\\b([a-zA-Z_][\\w\\.]*)\\b\\s*(>)(?=\\s*\\()",
11201122
"captures": {
11211123
"1": {
11221124
"name": "support.function.ps"
@@ -1357,11 +1359,14 @@
13571359
{"include": "#map_methods"},
13581360
{"include": "#matrix_methods"},
13591361
{"include": "#table_methods"},
1360-
{"include": "#long_functions"},
13611362
{
13621363
"match": "(?<![\\.]\\s*)\\b(fill)(?=\\s*\\((?!\\s*[\"'\\)]))",
13631364
"name": "support.function.property.ps"
1364-
},
1365+
}
1366+
]
1367+
},
1368+
"user_defined_functions": {
1369+
"patterns": [
13651370
{
13661371
"match": "(?:([\\w\\.]*))(\\.)\\b(new)\\b(?=\\s*\\()",
13671372
"captures": {
@@ -1449,7 +1454,7 @@
14491454
"name": "entity.name.function.ps"
14501455
},
14511456
{
1452-
"match": "(\\()(\\))\\s*(=>)",
1457+
"match": "(\\()\\s*(\\))\\s*(=>)",
14531458
"captures": {
14541459
"1":{"name":"meta.brace.round.ps"},
14551460
"2":{"name":"meta.brace.round.ps"},
@@ -1685,7 +1690,53 @@
16851690
}
16861691
},
16871692
{
1688-
"match": "(?<=^(?:\\s*export\\s*)?(?:\\s*method\\s*)?\\b\\w+\\s*\\()\\b((?:\\s*\\b[\\w][^\\(\\)]*\\s*\\,)*\\s*(?:\\b[\\w\\.]+(?:(?:\\s*\\<\\s*[\\w\\.]+\\s*\\>\\s*)|\\s*\\[\\s*\\]\\s*)?\\s+\\b\\w+\\s*(?:\\=\\s*[^\\(\\)\\s]*)?)(?:\\s*\\,\\s*\\b[\\w][^\\(\\)]*)*)(?=\\,\\s*(?://.*)?$)",
1693+
"match": "(?<=^\\s*export\\s+(?:method\\s+)?\\b\\w+\\s*\\()\\b([\\w][^\\(\\)]*)(?=\\s*\\,\\s*(?://.*)?$)",
1694+
"captures": {
1695+
"1":{
1696+
"patterns": [
1697+
{"include": "#strings"},
1698+
{"include": "#collection_new"},
1699+
{"include": "#array_new"},
1700+
{"include": "#constants"},
1701+
{"include": "#support_type"},
1702+
{"include": "#built_in_constants"},
1703+
{"include": "#user_define_types"},
1704+
{
1705+
"match": "\\b([a-zA-Z_]\\w*)\\b",
1706+
"name":"variable.parameter.ps"
1707+
},
1708+
{
1709+
"include": "#operators"
1710+
}
1711+
]
1712+
}
1713+
}
1714+
},
1715+
{
1716+
"match": "(?<=^\\s*(?:export\\s+)?method\\s+\\b\\w+\\s*\\()\\b([\\w][^\\(\\)]*)(?=\\s*\\,\\s*(?://.*)?$)",
1717+
"captures": {
1718+
"1":{
1719+
"patterns": [
1720+
{"include": "#strings"},
1721+
{"include": "#collection_new"},
1722+
{"include": "#array_new"},
1723+
{"include": "#constants"},
1724+
{"include": "#support_type"},
1725+
{"include": "#built_in_constants"},
1726+
{"include": "#user_define_types"},
1727+
{
1728+
"match": "\\b([a-zA-Z_]\\w*)\\b",
1729+
"name":"variable.parameter.ps"
1730+
},
1731+
{
1732+
"include": "#operators"
1733+
}
1734+
]
1735+
}
1736+
}
1737+
},
1738+
{
1739+
"match": "(?<=^\\s*(?:export\\s+)?(?:method\\s+)?\\b\\w+\\s*\\()((?:\\s*(?:\\b[\\w\\.]+\\s*(?:(?:\\<\\s*(?:(?:[\\w\\.]+)|(?:[\\w]+\\s*\\,\\s*[\\w\\.]+))\\s*\\>)|(?:\\[\\s*\\]))?\\s+)?\\b\\w+\\s*(?:\\=\\s*[\\w\\.\\#]+)?\\s*\\,)*(?:\\s*\\b[\\w\\.]+\\s*(?:(?:\\<\\s*(?:(?:[\\w\\.]+)|(?:[\\w]+\\s*\\,\\s*[\\w\\.]+))\\s*\\>)|(?:\\[\\s*\\]))?\\s+\\b\\w+\\s*(?:\\=\\s*[\\w\\.\\#]+)?\\s*)(?:\\,\\s*(?:\\b[\\w\\.]+\\s*(?:(?:\\<\\s*(?:(?:[\\w\\.]+)|(?:[\\w]+\\s*\\,\\s*[\\w\\.]+))\\s*\\>)|(?:\\[\\s*\\]))?\\s+)?\\b\\w+\\s*(?:\\=\\s*[\\w\\.\\#]+)?\\s*)*)(?=\\s*\\,\\s*(?://.*)?$)",
16891740
"captures": {
16901741
"1":{
16911742
"patterns": [
@@ -1708,7 +1759,7 @@
17081759
}
17091760
},
17101761
{
1711-
"match": "(?<=^\\s*)\\b((?:\\s*\\b[\\w][^\\(\\)]*\\s*\\,)*\\s*(?:\\b[\\w\\.]+(?:(?:\\s*\\<\\s*[\\w\\.]+\\s*\\>\\s*)|\\s*\\[\\s*\\]\\s*)?\\s+\\b\\w+\\s*(?:\\=\\s*[^\\(\\)\\s]*)?)(?:\\s*\\,\\s*\\b[\\w][^\\(\\)]*)*)(?=\\,\\s*(?://.*)?$)",
1762+
"match": "(?<=^\\s*)((?:\\s*(?:\\b[\\w\\.]+\\s*(?:(?:\\<\\s*(?:(?:[\\w\\.]+)|(?:[\\w]+\\s*\\,\\s*[\\w\\.]+))\\s*\\>)|(?:\\[\\s*\\]))?\\s+)?\\b\\w+\\s*(?:\\=\\s*[\\w\\.\\#]+)?\\s*\\,)*(?:\\s*\\b[\\w\\.]+\\s*(?:(?:\\<\\s*(?:(?:[\\w\\.]+)|(?:[\\w]+\\s*\\,\\s*[\\w\\.]+))\\s*\\>)|(?:\\[\\s*\\]))?\\s+\\b\\w+\\s*(?:\\=\\s*[\\w\\.\\#]+)?\\s*)(?:\\,\\s*(?:\\b[\\w\\.]+\\s*(?:(?:\\<\\s*(?:(?:[\\w\\.]+)|(?:[\\w]+\\s*\\,\\s*[\\w\\.]+))\\s*\\>)|(?:\\[\\s*\\]))?\\s+)?\\b\\w+\\s*(?:\\=\\s*[\\w\\.\\#]+)?\\s*)*)(?=\\s*\\,\\s*(?://.*)?$)",
17121763
"captures": {
17131764
"1":{
17141765
"patterns": [
@@ -1755,6 +1806,40 @@
17551806
}
17561807
]
17571808
},
1809+
"hover_function_parameters":{
1810+
"patterns": [
1811+
{
1812+
"match": "(?<=^(?:(?:[a-zA-Z_]\\w*)|(?:\\b[\\w\\.]*\\.(?:(?:[a-zA-Z_]\\w*)|(?:new\\s*<\\s*[a-zA-Z_][^\\(\\)]*\\b\\s*>))))\\s*\\(\\s*)([^\\(\\)]*)\\)\\s*(→)(.+)",
1813+
"captures": {
1814+
"1":{
1815+
"patterns": [
1816+
{
1817+
"match": "\\b([a-zA-Z_]\\w*)\\b",
1818+
"name": "variable.parameter.ps"
1819+
},
1820+
{
1821+
"include": "#operators"
1822+
}
1823+
]
1824+
},
1825+
"2":{"name":"storage.type.function.arrow.ps"},
1826+
"3":{
1827+
"patterns": [
1828+
{"include": "#operators"},
1829+
{
1830+
"match": "\\b(void|input|map|keyType|valueType|value_type)\\b",
1831+
"name": "support.type.primitive.ps"
1832+
},
1833+
{
1834+
"match": "\\b([a-zA-Z_]+)\\b",
1835+
"name": "support.type.primitive.ps"
1836+
}
1837+
]
1838+
}
1839+
}
1840+
}
1841+
]
1842+
},
17581843
"user_define_types":{
17591844
"patterns": [
17601845
{
@@ -2827,15 +2912,15 @@
28272912
"patterns":[
28282913
{"include": "#primitive_type"},
28292914
{
2830-
"match": "\\b(box|color|label|line|linefill|table)\\b(?!\\s*[\\=\\(])",
2915+
"match": "\\b(box|color|label|line|linefill|table)\\b(?!\\s*[\\=\\(\\,])",
28312916
"name": "support.type.primitive.ps"
28322917
}
28332918
]
28342919
},
28352920
"primitive_type":{
28362921
"patterns":[
28372922
{
2838-
"match": "\\b(bool|float|int|string|simple|series|array|map|matrix|chart.point)\\b",
2923+
"match": "\\b(bool|float|int|string|simple|series|array|map|matrix|chart.point)\\b(?!\\s*\\=\\()",
28392924
"name": "support.type.primitive.ps"
28402925
}
28412926
]
@@ -2877,11 +2962,11 @@
28772962
"built_in_constants":{
28782963
"patterns": [
28792964
{
2880-
"match": "(?<![\\.]\\s*)\\b(hour|minute|month|second|time|volume|year)\\b(?!\\s*[\\.\\(\\=])",
2965+
"match": "(?<![\\.]\\s*)\\b(hour|minute|month|second|time|volume|year)\\b(?=(?!\\s*(?:[\\.\\(\\=]|(?:\\:\\=)))|(?:\\s*\\=\\=))",
28812966
"name": "support.constant.ps"
28822967
},
28832968
{
2884-
"match": "(?<![\\.]\\s*)\\b(bar_index|close|dayofmonth|dayofweek|high|hl2|hlc3|hlcc4|last_bar_index|last_bar_time|low|na|ohlc4|open|time_close|time_tradingday|timenow|weekofyear)\\b(?!\\s*[\\.\\(])",
2969+
"match": "(?<![\\.]\\s*)\\b(bar_index|close|dayofmonth|dayofweek|high|hl2|hlc3|hlcc4|last_bar_index|last_bar_time|low|na|ohlc4|open|time_close|time_tradingday|timenow|weekofyear)\\b(?=(?!\\s*(?:[\\.\\(\\=]|(?:\\:\\=)))|(?:\\s*\\=\\=))",
28852970
"name": "support.constant.ps"
28862971
},
28872972
{"include": "#strategy_openclose_trade"}

0 commit comments

Comments
 (0)