Skip to content

Commit 9008e27

Browse files
Rewrite the grammar (#9)
* step 1 * use .luau endings * use correct numbers * handle identifier * handle operators * cleanup + language constants * accept current test snapshots * string interpolation * handle local declaration and for loop independently * initial types support * handle generics independently + comma in type tables * handle varags and accept function related diffs * support function return types * accept shebang test case * cleanup * cleanup keywords and standard library * handle type casting * explicitly capture parentheses this is important as it seems matching is greedy - so we need to capture internal parentheses so that typeof doesn't do so * match tables explicitly also accept issue 5 and 6 fixes * fix issue 3 + cleanup * don't apply class entity scope on method calls * highlight metamethods * cleanup * fix compound assignment + floor division + pull new full moon cases * escape slash before new line * pull stylua test cases * accept test cases * accept more snapshots - fix comments inside of local declaration * accept lua cases from stylua there are too many to care about in detail right now - useful to determine differences in future * fix handling of type alias declarations * extract out identifier * accept test cases not correct, but used to determine changes * update grammar
1 parent 9f320ad commit 9008e27

File tree

495 files changed

+111911
-2339
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

495 files changed

+111911
-2339
lines changed

Diff for: Luau.YAML-tmLanguage

+261-218
Large diffs are not rendered by default.

Diff for: Luau.tmLanguage

+593-467
Large diffs are not rendered by default.

Diff for: Luau.tmLanguage.json

+398-317
Large diffs are not rendered by default.

Diff for: pull-test-cases.py

+21-5
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,42 @@
1-
# Retrieves test cases from the full-moon repository
1+
# Retrieves test cases from the full-moon and stylua repository
22
# https://github.com/Kampfkarren/full-moon
3+
# https://github.com/JohnnyMorganz/StyLua
34

45
import os
56
import shutil
67

7-
FULL_MOON_CLONE = "git clone https://github.com/Kampfkarren/full-moon.git"
8+
FULL_MOON_CLONE = "git clone --depth=1 https://github.com/Kampfkarren/full-moon.git"
89
FULL_MOON_LUA_TESTS_DIRS = "./full-moon/full-moon/tests/cases/pass"
910
FULL_MOON_LUAU_TESTS_DIR = "./full-moon/full-moon/tests/roblox_cases/pass"
1011

12+
STYLUA_CLONE = "git clone --depth=1 https://github.com/JohnnyMorganz/StyLua.git"
13+
STYLUA_LUA_TESTS_DIRS = "./stylua/tests/inputs"
14+
STYLUA_LUAU_TESTS_DIR = "./stylua/tests/inputs-luau"
15+
1116
OUTPUT_DIRECTORY = "./tests/cases"
1217

1318
# Clone the relevant repositories
1419
os.system(FULL_MOON_CLONE)
20+
os.system(STYLUA_CLONE)
21+
1522

1623
# Copy new tests
1724
def copy_test_files(input: str, output_directory: str, prefix: str):
1825
for test in os.listdir(input):
19-
source_file = os.path.join(input, test, "source.lua")
20-
shutil.copyfile(source_file, os.path.join(output_directory, prefix + test + ".luau"))
26+
source_file = os.path.join(input, test)
27+
if os.path.isdir(source_file):
28+
source_file = os.path.join(source_file, "source.lua")
29+
shutil.copyfile(
30+
source_file, os.path.join(output_directory, prefix + test + ".luau")
31+
)
32+
2133

2234
copy_test_files(FULL_MOON_LUA_TESTS_DIRS, OUTPUT_DIRECTORY, "full-moon-lua-")
2335
copy_test_files(FULL_MOON_LUAU_TESTS_DIR, OUTPUT_DIRECTORY, "full-moon-luau-")
2436

37+
copy_test_files(STYLUA_LUA_TESTS_DIRS, OUTPUT_DIRECTORY, "stylua-lua-")
38+
copy_test_files(STYLUA_LUAU_TESTS_DIR, OUTPUT_DIRECTORY, "stylua-luau-")
39+
2540
# Cleanup the cloned repositories
26-
shutil.rmtree("./full-moon", ignore_errors=True)
41+
shutil.rmtree("./full-moon", ignore_errors=True)
42+
shutil.rmtree("./stylua", ignore_errors=True)

Diff for: tests/baselines/full-moon-lua-anonymous-functions-1.baseline.txt

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ end
1212
^
1313
source.luau
1414
^
15-
source.luau variable.other.luau
15+
source.luau variable.other.readwrite.luau
1616
^
1717
source.luau
1818
^
@@ -22,20 +22,20 @@ end
2222
^^^^^^^^
2323
source.luau meta.function.luau keyword.control.luau
2424
^
25-
source.luau meta.function.luau
25+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.begin.luau
2626
^
27-
source.luau meta.function.luau
27+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.end.luau
2828
> call(1)
2929
^^
3030
source.luau
3131
^^^^
3232
source.luau entity.name.function.luau
3333
^
34-
source.luau
34+
source.luau punctuation.arguments.begin.luau
3535
^
3636
source.luau constant.numeric.decimal.luau
37-
^^
38-
source.luau
37+
^
38+
source.luau punctuation.arguments.end.luau
3939
>end
4040
^^^
4141
source.luau keyword.control.luau

Diff for: tests/baselines/full-moon-lua-anonymous-functions-2.baseline.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,30 @@ end)
99
^^^^
1010
source.luau entity.name.function.luau
1111
^
12-
source.luau
12+
source.luau punctuation.arguments.begin.luau
1313
^^^^^^^^
1414
source.luau meta.function.luau keyword.control.luau
1515
^
16-
source.luau meta.function.luau
16+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.begin.luau
1717
^
18-
source.luau meta.function.luau
18+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.end.luau
1919
> foo("bar")
2020
^^
2121
source.luau
2222
^^^
2323
source.luau entity.name.function.luau
2424
^
25-
source.luau
25+
source.luau punctuation.arguments.begin.luau
2626
^
2727
source.luau string.quoted.double.luau
2828
^^^
2929
source.luau string.quoted.double.luau
3030
^
3131
source.luau string.quoted.double.luau
32-
^^
33-
source.luau
32+
^
33+
source.luau punctuation.arguments.end.luau
3434
>end)
3535
^^^
3636
source.luau keyword.control.luau
37-
^^
38-
source.luau
37+
^
38+
source.luau punctuation.arguments.end.luau

Diff for: tests/baselines/full-moon-lua-anonymous-functions-3.baseline.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ local x = function(...) end
99
^
1010
source.luau
1111
^
12-
source.luau variable.other.luau
12+
source.luau variable.other.readwrite.luau
1313
^
1414
source.luau
1515
^
@@ -19,11 +19,11 @@ local x = function(...) end
1919
^^^^^^^^
2020
source.luau meta.function.luau keyword.control.luau
2121
^
22-
source.luau meta.function.luau
22+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.begin.luau
2323
^^^
24-
source.luau meta.function.luau meta.parameters.luau
24+
source.luau meta.function.luau meta.parameter.luau variable.parameter.function.varargs.luau
2525
^
26-
source.luau meta.function.luau
26+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.end.luau
2727
^
2828
source.luau
2929
^^^

Diff for: tests/baselines/full-moon-lua-anonymous-functions-4.baseline.txt

+15-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ local x = function(a, b, ...) end
99
^
1010
source.luau
1111
^
12-
source.luau variable.other.luau
12+
source.luau variable.other.readwrite.luau
1313
^
1414
source.luau
1515
^
@@ -19,17 +19,23 @@ local x = function(a, b, ...) end
1919
^^^^^^^^
2020
source.luau meta.function.luau keyword.control.luau
2121
^
22-
source.luau meta.function.luau
22+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.begin.luau
2323
^
24-
source.luau meta.function.luau meta.parameters.luau variable.parameter.luau
25-
^^
26-
source.luau meta.function.luau meta.parameters.luau
24+
source.luau meta.function.luau meta.parameter.luau variable.parameter.function.luau
25+
^
26+
source.luau meta.function.luau meta.parameter.luau punctuation.separator.arguments.luau
27+
^
28+
source.luau meta.function.luau meta.parameter.luau
2729
^
28-
source.luau meta.function.luau meta.parameters.luau variable.parameter.luau
29-
^^^^^
30-
source.luau meta.function.luau meta.parameters.luau
30+
source.luau meta.function.luau meta.parameter.luau variable.parameter.function.luau
31+
^
32+
source.luau meta.function.luau meta.parameter.luau punctuation.separator.arguments.luau
33+
^
34+
source.luau meta.function.luau meta.parameter.luau
35+
^^^
36+
source.luau meta.function.luau meta.parameter.luau variable.parameter.function.varargs.luau
3137
^
32-
source.luau meta.function.luau
38+
source.luau meta.function.luau meta.parameter.luau punctuation.definition.parameters.end.luau
3339
^
3440
source.luau
3541
^^^

Diff for: tests/baselines/full-moon-lua-assignment-3.baseline.txt

+12-4
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,12 @@ a, b, c.d.e[f][g][1], h:i().j[k]:l()[m] = true, false, 1, 4
4848
source.luau
4949
^
5050
source.luau entity.name.function.luau
51-
^^^
52-
source.luau
51+
^
52+
source.luau punctuation.arguments.begin.luau
53+
^
54+
source.luau punctuation.arguments.end.luau
55+
^
56+
source.luau
5357
^
5458
source.luau variable.other.property.luau
5559
^
@@ -60,8 +64,12 @@ a, b, c.d.e[f][g][1], h:i().j[k]:l()[m] = true, false, 1, 4
6064
source.luau
6165
^
6266
source.luau entity.name.function.luau
63-
^^^
64-
source.luau
67+
^
68+
source.luau punctuation.arguments.begin.luau
69+
^
70+
source.luau punctuation.arguments.end.luau
71+
^
72+
source.luau
6573
^
6674
source.luau variable.other.readwrite.luau
6775
^^
+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
original file
2+
-----------------------------------
3+
a = 1
4+
b = 2
5+
6+
-----------------------------------
7+
8+
>a = 1
9+
^
10+
source.luau variable.other.readwrite.luau
11+
^
12+
source.luau
13+
^
14+
source.luau keyword.operator.assignment.luau
15+
^
16+
source.luau
17+
^
18+
source.luau constant.numeric.decimal.luau
19+
>b = 2
20+
^
21+
source.luau variable.other.readwrite.luau
22+
^
23+
source.luau
24+
^
25+
source.luau keyword.operator.assignment.luau
26+
^
27+
source.luau
28+
^
29+
source.luau constant.numeric.decimal.luau
30+
>
31+
^
32+
source.luau
+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
original file
2+
-----------------------------------
3+
gui.Label.Text = "LOADING DATA" .. ("."):rep(dotCount)
4+
5+
-----------------------------------
6+
7+
>gui.Label.Text = "LOADING DATA" .. ("."):rep(dotCount)
8+
^^^
9+
source.luau variable.other.readwrite.luau
10+
^
11+
source.luau
12+
^^^^^
13+
source.luau variable.other.property.luau
14+
^
15+
source.luau
16+
^^^^
17+
source.luau variable.other.property.luau
18+
^
19+
source.luau
20+
^
21+
source.luau keyword.operator.assignment.luau
22+
^
23+
source.luau
24+
^
25+
source.luau string.quoted.double.luau
26+
^^^^^^^^^^^^
27+
source.luau string.quoted.double.luau
28+
^
29+
source.luau string.quoted.double.luau
30+
^
31+
source.luau
32+
^^
33+
source.luau keyword.operator.other.luau
34+
^
35+
source.luau
36+
^
37+
source.luau punctuation.arguments.begin.luau
38+
^
39+
source.luau string.quoted.double.luau
40+
^
41+
source.luau string.quoted.double.luau
42+
^
43+
source.luau string.quoted.double.luau
44+
^
45+
source.luau punctuation.arguments.end.luau
46+
^
47+
source.luau
48+
^^^
49+
source.luau entity.name.function.luau
50+
^
51+
source.luau punctuation.arguments.begin.luau
52+
^^^^^^^^
53+
source.luau variable.other.readwrite.luau
54+
^
55+
source.luau punctuation.arguments.end.luau
56+
>
57+
^
58+
source.luau
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
original file
2+
-----------------------------------
3+
do
4+
5+
end
6+
-----------------------------------
7+
8+
>do
9+
^^
10+
source.luau keyword.control.luau
11+
>
12+
^^^^^
13+
source.luau
14+
>end
15+
^^^
16+
source.luau keyword.control.luau

Diff for: tests/baselines/full-moon-lua-call-1.baseline.txt

+14-10
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,31 @@ call(1, 2)
88
>call()
99
^^^^
1010
source.luau entity.name.function.luau
11-
^^^
12-
source.luau
11+
^
12+
source.luau punctuation.arguments.begin.luau
13+
^
14+
source.luau punctuation.arguments.end.luau
1315
>call(1)
1416
^^^^
1517
source.luau entity.name.function.luau
1618
^
17-
source.luau
19+
source.luau punctuation.arguments.begin.luau
1820
^
1921
source.luau constant.numeric.decimal.luau
20-
^^
21-
source.luau
22+
^
23+
source.luau punctuation.arguments.end.luau
2224
>call(1, 2)
2325
^^^^
2426
source.luau entity.name.function.luau
2527
^
26-
source.luau
28+
source.luau punctuation.arguments.begin.luau
2729
^
2830
source.luau constant.numeric.decimal.luau
29-
^^
30-
source.luau
31+
^
32+
source.luau punctuation.separator.arguments.luau
33+
^
34+
source.luau
3135
^
3236
source.luau constant.numeric.decimal.luau
33-
^^
34-
source.luau
37+
^
38+
source.luau punctuation.arguments.end.luau

0 commit comments

Comments
 (0)