@@ -82,17 +82,6 @@ repository:
8282 name : keyword.control.line-continuation.vba
8383 match : (?<=\s)_\s*\n
8484
85- syntaxLines :
86- name : meta.syntax-lines.vba
87- match : ((?:[^\n"':]|"(?:\\.|[^\n"\\])*")+|"(?:\\.|[^\n"\\])*")(?:('.*)*)?
88- captures :
89- 1 : # Split line
90- patterns :
91- - include : " #main"
92- 2 : # Comments
93- patterns :
94- - include : " #comments"
95-
9685 main :
9786 patterns :
9887 - include : " #declareFunctionSignature"
@@ -109,10 +98,11 @@ repository:
10998 - include : " #literals"
11099 - include : " #operators"
111100 - include : " #keywords"
112- - include : " #variables "
101+ - include : " #kw-storageMe "
113102 - include : " #functionCall"
114103 - include : " #objectModel"
115104 - include : " #subCall"
105+ - include : " #subCallNoArgs"
116106
117107
118108 literals :
@@ -335,10 +325,6 @@ repository:
335325 name : invalid.illegal.vba
336326 match : " ^#.*"
337327
338- variables :
339- name : variable.language.me.vba
340- match : (?i)\s+(Me)(?=\.|\s)
341-
342328 labels :
343329 # name: variable.other.constant.label.vba
344330 match : ' (?i)^(\s*[a-z][a-z0-9_]*|\d+):'
@@ -461,63 +447,15 @@ repository:
461447 2 : # Identifier
462448 name : variable.parameter.vba
463449
464- # TODO: This needs to be repurposed to sub / function CALL rather than signature.
465- # Will need to separate arguments by comma, take line endings into account, and ignore commas inside parentheses.
466- # someSub someVar, "someLiteral", someFunc(1, 2, 3), _
467- # someNextLineFunc()
468450 arguments :
469- # Rules that have no match will never return a name in the hierarchy.
470- # This name doesn't do anything but leaving this as usage notes.
471- name : source.args.vba
451+ name : meta.arguments.vba
452+ begin : (\s+|\(\s*)
453+ end : (?=[\n')])
472454 patterns :
473455 - include : " #lineContinuation"
474- - include : " #paramArray"
475456 - include : " #functionCall"
476- - include : " #argsVariable"
477- - include : " #language"
478- - include : " #argsLiteral"
479- repository :
480- argsVariable :
481- name : meta.arguments.argsVariable.vba
482- match : (?i),?\s*((?:Optional\s+)?(?:(?:ByVal|ByRef)\s+)?)?([a-z][a-z0-9_]*)(\(\))?(?:\s+(as\s+[a-z][a-z0-9_]*))?(\s*=\s*[^,)]+)?
483- # Attempted replacing \s with (?:\s+|\s*_\s*\n) to consume a space or a line ending but it refuses to play the game.
484- # match: ~~ doesn't work (?i),?(?:\s+|\s*_\s*\n)*((?:Optional(?:\s+|\s*_\s*\n)+)?(?:(?:ByVal|ByRef)(?:\s+|\s*_\s*\n)+)?)?([a-z][a-z0-9_]*)(?:(?:\s+|\s*_\s*\n)+(as(?:\s+|\s*_\s*\n)+[a-z][a-z0-9_]*))?((?:\s+|\s*_\s*\n)*=(?:\s+|\s*_\s*\n)*[^,\n)]+)?
485- # match: ~~ all broken (?i),?(?:\s*_\s*\n)*((?:Optional(?:\s+(?:\s*_\s*\n)*))?(?:(?:ByVal|ByRef)(?:\s+(?:\s*_\s*\n)*))?)?([a-z][a-z0-9_]*)(?:(?:\s+(?:\s*_\s*\n)*)(as\(?:\s+(?:\s*_\s*\n)*)[a-z][a-z0-9_]*))?((?:\s*_\s*\n)*=(?:\s*_\s*\n)*[^,)]+)?
486- captures :
487- 1 : # Optional? ByVal|ByRef?
488- name : storage.type.modifier.vba
489- 2 : # Identifier
490- name : variable.parameter.vba
491- 3 : # As Type?
492- patterns :
493- - include : " #types"
494- 4 :
495- patterns :
496- - include : " #language"
497-
498- argsLiteral :
499- # Should ideally only match on something that could be considered a literal.
500- # This kludge will at least not consume unmatched close parentheses.
501- name : meta.arguments.argsLiteral.vba
502- match : ((?:[^(",\n()]|"(?:\\.|[^\n"\\])*"|\([^)]*\))+|"(?:\\.|[^\n"\\])*")
503- captures :
504- 1 :
505- patterns :
506- - include : " #literals"
507-
508- paramArray :
509- name : meta.args.paramarray.vba
510- match : (?i)(,)?\s*(ParamArray)\s+([a-z][a-z0-9_]*)(?:\(\))(\s+As\s+Variant)?
511- captures :
512- 1 :
513- name : punctuation.separator.vba
514- 2 :
515- name : storage.type.modifier.array.vba
516- 3 :
517- name : variable.parameter.vba
518- 4 :
519- patterns :
520- - include : " #types"
457+ - include : " #separator"
458+ - include : " #expression"
521459
522460 comments :
523461 patterns :
@@ -796,12 +734,9 @@ repository:
796734 blockLines :
797735 name : source.methodlines.vba
798736 match : (?:(^(?:\s*[a-z0-9]*?:\s*)(?:\s+'.*)?$)|(.*):)
799- # match: (?:(^(?:\s*[a-z0-9]*?:\s*)(?:\s+'.*)?$)|(.*):)
800737 captures :
801738 1 : # label
802739 name : source.methodlines.label.vba
803- # patterns:
804- # - include: "#labels"
805740 2 : # colon separated line
806741 patterns :
807742 - include : " #block"
@@ -859,25 +794,23 @@ repository:
859794 - include : " #language"
860795
861796 variableAssignment :
862- match : (?i)(?:(Get|Let|Set)\s+)?(?:([a-z][a-z0-9_]*))?(\.(?:(?:[a-z][a-z0-9_]*)?\.)*)?([a-z][a-z0-9_]*)?(\s*=\s*)(.*)
863- captures :
864- 1 : # Get|Let|Set
797+ name : meta.variable-assignment.vba
798+ begin : (?i)(?:(Let|Set)\s+)?((?:[a-z][a-z0-9_]*)?(?:\.(?:(?:[a-z][a-z0-9_]*)?\.)*)?(?:[a-z][a-z0-9_]*)?)(\s*=\s*)
799+ end : (?=[':\n])
800+ beginCaptures :
801+ 1 : # Let|Set
865802 name : keyword.control.vba
866- 2 : # Variable name
867- name : variable.other.assignment.vba
868- 3 : # Properties
869- patterns :
870- - include : " #propertyChain"
871- 4 : # Property name
872- name : support.variable.property.vba
873- 5 : # =
874- name : keyword.operator.assignment.vba
875- 6 : # Expression
803+ 2 : # Variable property chain name
876804 patterns :
877- - include : " #expression"
878- - include : " #functionCall"
879805 - include : " #variable"
880- - include : " #language"
806+ 3 : # =
807+ name : keyword.operator.assignment.vba
808+ patterns :
809+ - include : " #expression"
810+ - include : " #functionCall"
811+ - include : " #variable"
812+ - include : " #language"
813+ - include : " #lineContinuation"
881814
882815 propertyChain :
883816 match : (?i)(\.)([a-z][a-z0-9_]*)*
@@ -902,31 +835,56 @@ repository:
902835
903836 functionCall :
904837 name : meta.function.call.vba
905- begin : (?i)([a-z][a-z0-9_]*)\(
906- end : \ )
838+ begin : (?i)(?:( [a-z][a-z0-9_]*)(?=\.))?(\.(?:(?:[a-z][a-z0-9_]*)?\.)*)?([a-z][a-z0-9_]*)([&%#!@$^])?(?=\()
839+ end : (\)|(?=') )
907840 beginCaptures :
908841 1 :
842+ patterns :
843+ - include : " #kw-storageMe"
844+ - include : " #variable"
845+ 2 :
846+ patterns :
847+ - include : " #propertyChain"
848+ 3 :
909849 name : entity.name.function.call.vba
850+ 4 :
851+ name : support.type.primitive.vba
910852 patterns :
911853 # These calls need to be back to a top level group because
912854 # textMate does not seem to support a repository in a begin/end
913855 - include : " #arguments"
914- - include : " #lineContinuation"
915856
916857 subCall :
917858 name : meta.sub-call.vba
918- begin : (?i)([a-z][a-z0-9._]*)\s+(.*)
859+ begin : (?i)(?:([a-z][a-z0-9_]*)(?=\.))?(\.(?:(?:[a-z][a-z0-9_]*)?\.)*)?([a-z][a-z0-9_]*)\s*(?=\s[^,'\n])
860+ end : (?=[\n'])
919861 beginCaptures :
920862 1 :
921- name : entity.name.function.call.vba
863+ patterns :
864+ - include : " #kw-storageMe"
865+ - include : " #variable"
922866 2 :
923867 patterns :
924- - include : " #arguments"
925- end : \n
868+ - include : " #propertyChain"
869+ 3 :
870+ name : entity.name.function.call.vba
926871 patterns :
927- # - include: "#subCallMultiLine"
928872 - include : " #arguments"
929873
874+ subCallNoArgs :
875+ name : meta.sub-call.vba
876+ match : (?i)(?:([a-z][a-z0-9_]*)(?=\.))?(\.(?:(?:[a-z][a-z0-9_]*)?\.)*)?([a-z][a-z0-9_]*)
877+ captures :
878+ 1 :
879+ patterns :
880+ - include : " #kw-storageMe"
881+ - include : " #variable"
882+ 2 :
883+ patterns :
884+ - include : " #propertyChain"
885+ 3 :
886+ name : entity.name.function.call.vba
887+
930888 testing :
931889 patterns :
932890 - name : keyword.control
0 commit comments