File tree Expand file tree Collapse file tree 4 files changed +30044
-26710
lines changed
Expand file tree Collapse file tree 4 files changed +30044
-26710
lines changed Original file line number Diff line number Diff line change 1+ ============================================
2+ Function definitions
3+ ============================================
4+
5+ f = function() return false end
6+
7+ a.b.f = function() return true end
8+
9+ local f
10+ f = function() return 'some string' end
11+
12+ a.b.f = function(self, test, ...) return 10 end
13+
14+ ---
15+
16+ (lua
17+ (variable_declaration (variable_declarator (identifier))
18+ (function_definition (parameters)
19+ (return_statement (false))))
20+
21+ (variable_declaration (variable_declarator (identifier) (property_identifier) (property_identifier))
22+ (function_definition (parameters)
23+ (return_statement (true))))
24+
25+ (local_variable_declaration (variable_declarator (identifier)))
26+
27+ (variable_declaration (variable_declarator (identifier))
28+ (function_definition (parameters)
29+ (return_statement (string))))
30+
31+ (variable_declaration (variable_declarator (identifier) (property_identifier) (property_identifier))
32+ (function_definition (parameters (self) (identifier) (spread))
33+ (return_statement (number)))))
Original file line number Diff line number Diff line change @@ -190,11 +190,34 @@ module.exports = grammar({
190190
191191 _empty_statement : $ => ';' ,
192192
193+ // Functions
194+ parameters : $ => seq (
195+ '(' ,
196+ optional ( choice (
197+ seq (
198+ optional ( seq ( $ . self , optional ( ',' ) ) ) ,
199+ sequence ( $ . identifier ) ,
200+ optional ( seq ( ',' , $ . spread ) )
201+ ) ,
202+ seq ( $ . spread )
203+ ) ) ,
204+ ')'
205+ ) ,
206+
207+ _function_body : $ => seq (
208+ $ . parameters ,
209+ repeat ( $ . _statement ) ,
210+ optional ( $ . return_statement ) ,
211+ 'end'
212+ ) ,
213+
193214 // Expressions
194215 _expression : $ => choice (
195216 $ . spread ,
196217 $ . _prefix ,
197218
219+ $ . function_definition ,
220+
198221 $ . table ,
199222
200223 $ . binary_operation ,
@@ -220,6 +243,12 @@ module.exports = grammar({
220243 seq ( '(' , $ . _expression , ')' )
221244 ) ,
222245
246+ // Definitions
247+ function_definition : $ => seq (
248+ 'function' ,
249+ $ . _function_body
250+ ) ,
251+
223252 // Tables
224253 table : $ => seq (
225254 '{' ,
Original file line number Diff line number Diff line change 814814 "type" : " STRING" ,
815815 "value" : " ;"
816816 },
817+ "parameters" : {
818+ "type" : " SEQ" ,
819+ "members" : [
820+ {
821+ "type" : " STRING" ,
822+ "value" : " ("
823+ },
824+ {
825+ "type" : " CHOICE" ,
826+ "members" : [
827+ {
828+ "type" : " CHOICE" ,
829+ "members" : [
830+ {
831+ "type" : " SEQ" ,
832+ "members" : [
833+ {
834+ "type" : " CHOICE" ,
835+ "members" : [
836+ {
837+ "type" : " SEQ" ,
838+ "members" : [
839+ {
840+ "type" : " SYMBOL" ,
841+ "name" : " self"
842+ },
843+ {
844+ "type" : " CHOICE" ,
845+ "members" : [
846+ {
847+ "type" : " STRING" ,
848+ "value" : " ,"
849+ },
850+ {
851+ "type" : " BLANK"
852+ }
853+ ]
854+ }
855+ ]
856+ },
857+ {
858+ "type" : " BLANK"
859+ }
860+ ]
861+ },
862+ {
863+ "type" : " SEQ" ,
864+ "members" : [
865+ {
866+ "type" : " SYMBOL" ,
867+ "name" : " identifier"
868+ },
869+ {
870+ "type" : " REPEAT" ,
871+ "content" : {
872+ "type" : " SEQ" ,
873+ "members" : [
874+ {
875+ "type" : " STRING" ,
876+ "value" : " ,"
877+ },
878+ {
879+ "type" : " SYMBOL" ,
880+ "name" : " identifier"
881+ }
882+ ]
883+ }
884+ }
885+ ]
886+ },
887+ {
888+ "type" : " CHOICE" ,
889+ "members" : [
890+ {
891+ "type" : " SEQ" ,
892+ "members" : [
893+ {
894+ "type" : " STRING" ,
895+ "value" : " ,"
896+ },
897+ {
898+ "type" : " SYMBOL" ,
899+ "name" : " spread"
900+ }
901+ ]
902+ },
903+ {
904+ "type" : " BLANK"
905+ }
906+ ]
907+ }
908+ ]
909+ },
910+ {
911+ "type" : " SEQ" ,
912+ "members" : [
913+ {
914+ "type" : " SYMBOL" ,
915+ "name" : " spread"
916+ }
917+ ]
918+ }
919+ ]
920+ },
921+ {
922+ "type" : " BLANK"
923+ }
924+ ]
925+ },
926+ {
927+ "type" : " STRING" ,
928+ "value" : " )"
929+ }
930+ ]
931+ },
932+ "_function_body" : {
933+ "type" : " SEQ" ,
934+ "members" : [
935+ {
936+ "type" : " SYMBOL" ,
937+ "name" : " parameters"
938+ },
939+ {
940+ "type" : " REPEAT" ,
941+ "content" : {
942+ "type" : " SYMBOL" ,
943+ "name" : " _statement"
944+ }
945+ },
946+ {
947+ "type" : " CHOICE" ,
948+ "members" : [
949+ {
950+ "type" : " SYMBOL" ,
951+ "name" : " return_statement"
952+ },
953+ {
954+ "type" : " BLANK"
955+ }
956+ ]
957+ },
958+ {
959+ "type" : " STRING" ,
960+ "value" : " end"
961+ }
962+ ]
963+ },
817964 "_expression" : {
818965 "type" : " CHOICE" ,
819966 "members" : [
825972 "type" : " SYMBOL" ,
826973 "name" : " _prefix"
827974 },
975+ {
976+ "type" : " SYMBOL" ,
977+ "name" : " function_definition"
978+ },
828979 {
829980 "type" : " SYMBOL" ,
830981 "name" : " table"
9091060 }
9101061 ]
9111062 },
1063+ "function_definition" : {
1064+ "type" : " SEQ" ,
1065+ "members" : [
1066+ {
1067+ "type" : " STRING" ,
1068+ "value" : " function"
1069+ },
1070+ {
1071+ "type" : " SYMBOL" ,
1072+ "name" : " _function_body"
1073+ }
1074+ ]
1075+ },
9121076 "table" : {
9131077 "type" : " SEQ" ,
9141078 "members" : [
You can’t perform that action at this time.
0 commit comments