diff --git a/src/languages/magik.js b/src/languages/magik.js index 3e86314a05..c76c5690e5 100644 --- a/src/languages/magik.js +++ b/src/languages/magik.js @@ -9,55 +9,95 @@ export default { 'char': { pattern: /%(?:[a-z][\w?!]*|.)/i, - greedy: true + greedy: true, }, 'string': { pattern: /"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/, - greedy: true + greedy: true, }, 'regex': { pattern: /\/(?:(?:\\.|[^\\/\r\n])+\/[qisdlmucx]*|\/)/, - greedy: true + greedy: true, }, - 'declaration': [ - { pattern: /(\b_package\s+).*/i, lookbehind: true }, - { pattern: /(\b_global\s+)(?!_)\w+/i, lookbehind: true }, - { pattern: /(\b_constant\s+)[a-z_]+/i, lookbehind: true } - ], + 'slot': { + pattern: /(^|[\s({])\.\s*[a-z][\w?!]*/i, + lookbehind: true, + greedy: true, + }, 'pragma': { pattern: /_pragma.*/, alias: 'prolog', inside: { 'modifier': /classify_level|topic|usage/, - 'pragma-punctuation': { pattern: /[={},]/ } - } + 'pragma-punctuation': { pattern: /[={},]/ }, + }, }, - 'number': /\b\d+(?:\.\d+)?(?:[e&][+-]?\d+)?\b|\b(?:[2-9]|[12]\d|3[0-6])r[a-z0-9]+\b/i, - 'symbol': { pattern: /(^|\W):(?:\|[^|]*\||\\.|[\w?!])+/, - lookbehind: true + lookbehind: true, }, + 'global-reference': [ + { pattern: /@(?:[a-z_]\w*:)?\|[^|]*\|/i, alias: 'symbol' }, // @|name| or @prefix:|name| + { pattern: /@(?:[a-z_]\w*:)?[a-z_]\w*/i, alias: 'symbol' }, // @name or @prefix:name + ], + + 'dynamic-variable': [ + { pattern: /\|![\w?!]+!\|/, alias: 'variable' }, // variable encased like |!var!| + { pattern: /\|![\w?!]+\|!/, alias: 'variable' }, // variable encased like |!var|! + { pattern: /!\|[\w?!]+\|!/, alias: 'variable' }, // variable encased like !|var!| + { pattern: /!\|\|!/, alias: 'variable' }, // empty variable !||! + { pattern: /[a-z_]+:![a-z][\w?!]*!/i, alias: 'variable' }, // variable with a prefix like sw:!var! + { pattern: /![a-z][\w?!]*!/i, alias: 'variable' }, // variable encased like !var! + ], + + 'global-variable': [ + { pattern: /[a-z_]+:[\w?!]+/i, alias: 'variable' }, // variable with a prefix like sw:gis_program_manager + { pattern: /[a-z_]+:\|[\w?!]+\|/i, alias: 'variable' }, // variable with a prefix like sw:|gis_program_manager| + ], + + 'declaration': [ + { pattern: /(\b_package\s+)\w+\b/i, lookbehind: true }, + { pattern: /(\b_(?:constant|global|import|local)\s+)(?!_)\w+\b/i, lookbehind: true }, + ], + + 'number': + /(?/, />=/, /<=/, //, + />=/, + /<=/, + />/, /\b_return\b/i, // return + />>/, + /\b_return\b/i, /\b_primitive\b/i, // primitive /\b_(?:endtry|try|when)\b/i, // try /\b_(?:endprotect|locking|protect|protection)\b/i, // protect /\b_(?:endlock|lock)\b/i, // lock /\b_with\b/i, // standalone since _finally, _handling, _throw, _try, _leave and _continue all can have this - /\b_(?:allresults|gather|optional|scatter)\b/i // parameter options + /\b_(?:allresults|gather|optional|scatter)\b/i, // parameter options ], - 'slot': { - pattern: /(^|[\s({])\.\s*[a-z_]+/i, - lookbehind: true - }, - 'builtin': /\b_(?:clone|package|super|thisthread)\b/i, 'boolean': /\b_(?:false|maybe|true)\b/i, @@ -87,42 +123,32 @@ export default { 'unset': { pattern: /\b_unset\b/i, - alias: 'symbol' + alias: 'keyword', }, 'constant': { pattern: /\b_constant\b/i, - alias: 'symbol' - }, - - 'global-reference': { - pattern: /@(?:[a-z_]\w*:)?[a-z_]\w*/i, - alias: 'symbol' + alias: 'keyword', }, 'self': [ { pattern: /(\b_method\s+)\S+(?=\.)/, - lookbehind: true + lookbehind: true, }, - /\b_self\b/i + /\b_self\b/i, ], 'function': [ /\b_(?:abstract|endmethod|iter|method|private)\b/i, // method keywords /\b_(?:endproc|proc)\b/i, // procedure - { pattern: /(\.)\s*\|[a-z_]\w*[!?]?\|/, lookbehind: true }, // encased |methodNames| - { pattern: /(\.)\s*[a-z_]\w*[!?]?/, lookbehind: true }, // methods + { pattern: /(\.)\s*\|[a-z][\w?!]*\|/, lookbehind: true }, // encased |methodNames| + { pattern: /(\.)\s*[a-z][\w?!]*/, lookbehind: true }, // methods ], 'variable': [ - /\|![\w?!]+!\|/, // variable encased like |!var!| - /\|![\w?!]+\|!/, // variable encased like |!var|! - /!\|[\w?!]+\|!/, // variable encased like !|var!| - /!\|\|!/, // empty variable !||! - /![a-z][\w?!]*!/, // variable encased like !var! - /\b[a-z_]+:\w+\b/i, // variable with a prefix like sw:gis_program_manager - { pattern: /(^|[^.])\b[a-z]\w*\b/i, lookbehind: true } + /\|[\w?!]+\|/, // variable encased like |var|, |0|, |123| + { pattern: /(^|[^.])\b[a-z]\w*\b/i, lookbehind: true }, ], - } + }, }; diff --git a/tests/languages/magik/constant_feature.test b/tests/languages/magik/constant_feature.test index 85f803cfd7..058aaf67ac 100644 --- a/tests/languages/magik/constant_feature.test +++ b/tests/languages/magik/constant_feature.test @@ -1,21 +1,23 @@ -_constant something -_global _constant something -_global _constant gis_program_manager << _unset +_block + _constant something << _unset + _constant max_size << 1 + _constant _local max_size << 1 + _local _constant max_size << 1 +_endblock _global _constant !current_view! << _unset -_constant max_size << 1 -_constant _local max_size << 1 -_local _constant max_size << 1 +_global _constant gis_program_manager << _unset ---------------------------------------------------- [ - ["constant", "_constant"], ["declaration", "something"], - ["keyword", "_global"], ["constant", "_constant"], ["declaration", "something"], - ["keyword", "_global"], ["constant", "_constant"], ["declaration", "gis_program_manager"], ["operator", "<<"], ["unset", "_unset"], - ["keyword", "_global"], ["constant", "_constant"], ["variable", "!current_view!"], ["operator", "<<"], ["unset", "_unset"], - ["constant", "_constant"], ["declaration", "max_size"], ["operator", "<<"], ["number", "1"], - ["constant", "_constant"], ["declaration", "_local"], ["variable", "max_size"], ["operator", "<<"], ["number", "1"], - ["keyword", "_local"], ["constant", "_constant"], ["declaration", "max_size"], ["operator", "<<"], ["number", "1"] + ["keyword", "_block"], + ["constant", "_constant"], ["declaration", "something"], ["operator", "<<"], ["unset", "_unset"], + ["constant", "_constant"], ["declaration", "max_size"], ["operator", "<<"], ["number", "1"], + ["constant", "_constant"], ["keyword-variable", "_local"], ["declaration", "max_size"], ["operator", "<<"], ["number", "1"], + ["keyword-variable", "_local"], ["constant", "_constant"], ["declaration", "max_size"], ["operator", "<<"], ["number", "1"], + ["keyword", "_endblock"], + ["keyword-variable", "_global"], ["constant", "_constant"], ["dynamic-variable", "!current_view!"], ["operator", "<<"], ["unset", "_unset"], + ["keyword-variable", "_global"], ["constant", "_constant"], ["declaration", "gis_program_manager"], ["operator", "<<"], ["unset", "_unset"] ] ---------------------------------------------------- diff --git a/tests/languages/magik/declaration_feature.test b/tests/languages/magik/declaration_feature.test index e8ad36922d..9097c2aee9 100644 --- a/tests/languages/magik/declaration_feature.test +++ b/tests/languages/magik/declaration_feature.test @@ -1,15 +1,19 @@ _package user +_global some_var _global some_var; some_var << 1 _constant yippie << 2 _global _constant !done_meas_follow_nodes! << _unset +_import some_var ---------------------------------------------------- [ ["builtin", "_package"], ["declaration", "user"], - ["keyword", "_global"], ["declaration", "some_var"], ["punctuation", ";"], ["variable", "some_var"], ["operator", "<<"], ["number", "1"], - ["constant", "_constant"], ["declaration", "yippie"], ["operator", "<<"], ["number", "2"], - ["keyword", "_global"], ["constant", "_constant"], ["variable", "!done_meas_follow_nodes!"], ["operator", "<<"], ["unset", "_unset"] + ["keyword-variable", "_global"], ["declaration", "some_var"], + ["keyword-variable", "_global"], ["declaration", "some_var"], ["punctuation", ";"], ["variable", "some_var"], ["operator", "<<"], ["number", "1"], + ["constant", "_constant"], ["declaration", "yippie"], ["operator", "<<"], ["number", "2"], + ["keyword-variable", "_global"], ["constant", "_constant"], ["dynamic-variable", "!done_meas_follow_nodes!"], ["operator", "<<"], ["unset", "_unset"], + ["keyword-variable", "_import"], ["declaration", "some_var"] ] ---------------------------------------------------- diff --git a/tests/languages/magik/dynamic-variable_feature.test b/tests/languages/magik/dynamic-variable_feature.test new file mode 100644 index 0000000000..da949da50f --- /dev/null +++ b/tests/languages/magik/dynamic-variable_feature.test @@ -0,0 +1,21 @@ +!terminal! +sw:!terminal! +|!terminal!| +|!terminal|! +!|terminal|! +!||! + +---------------------------------------------------- + +[ + ["dynamic-variable", "!terminal!"], + ["dynamic-variable", "sw:!terminal!"], + ["dynamic-variable", "|!terminal!|"], + ["dynamic-variable", "|!terminal|!"], + ["dynamic-variable", "!|terminal|!"], + ["dynamic-variable", "!||!"] +] + +---------------------------------------------------- + +Checks for dynamic variables. diff --git a/tests/languages/magik/function_feature.test b/tests/languages/magik/function_feature.test index 03e1a6ad73..1844126f20 100644 --- a/tests/languages/magik/function_feature.test +++ b/tests/languages/magik/function_feature.test @@ -6,6 +6,7 @@ variable.method_name? variable.method_name() variable.|methodName|() object.method +object.int!method object.getName object.|getName| object.method<< _unset @@ -26,6 +27,7 @@ _clone.init() ["variable", "variable"], ".", ["function", "method_name"], ["punctuation", "("], ["punctuation", ")"], ["variable", "variable"], ".", ["function", "|methodName|"], ["punctuation", "("], ["punctuation", ")"], ["variable", "object"], ".", ["function", "method"], + ["variable", "object"], ".", ["function", "int!method"], ["variable", "object"], ".", ["function", "getName"], ["variable", "object"], ".", ["function", "|getName|"], ["variable", "object"], ".", ["function", "method"], ["operator", "<<"], ["unset", "_unset"], diff --git a/tests/languages/magik/global-reference_feature.test b/tests/languages/magik/global-reference_feature.test index 3f6ff002af..45510fbe75 100644 --- a/tests/languages/magik/global-reference_feature.test +++ b/tests/languages/magik/global-reference_feature.test @@ -1,15 +1,15 @@ @gis_program_manager -(@gis_program_manager) -{@gis_program_manager} -,@gis_program_manager +@|gis_program_manager| +@sw:gis_program_manager +@sw:|gis_program_manager| ---------------------------------------------------- [ ["global-reference", "@gis_program_manager"], - ["punctuation", "("], ["global-reference", "@gis_program_manager"], ["punctuation", ")"], - ["punctuation", "{"], ["global-reference", "@gis_program_manager"], ["punctuation", "}"], - ["punctuation", ","], ["global-reference", "@gis_program_manager"] + ["global-reference", "@|gis_program_manager|"], + ["global-reference", "@sw:gis_program_manager"], + ["global-reference", "@sw:|gis_program_manager|"] ] ---------------------------------------------------- diff --git a/tests/languages/magik/global-variable_feature.test b/tests/languages/magik/global-variable_feature.test new file mode 100644 index 0000000000..10f3cc356e --- /dev/null +++ b/tests/languages/magik/global-variable_feature.test @@ -0,0 +1,21 @@ +sw:gis_program_manager +sw:|gis_program_manager| +sw:question? +sw:|question?| +sw:sys!system +sw:|sys!system| + +---------------------------------------------------- + +[ + ["global-variable", "sw:gis_program_manager"], + ["global-variable", "sw:|gis_program_manager|"], + ["global-variable", "sw:question?"], + ["global-variable", "sw:|question?|"], + ["global-variable", "sw:sys!system"], + ["global-variable", "sw:|sys!system|"] +] + +---------------------------------------------------- + +Checks for global variables. diff --git a/tests/languages/magik/keyword-variable_feature.test b/tests/languages/magik/keyword-variable_feature.test new file mode 100644 index 0000000000..363ecab2a3 --- /dev/null +++ b/tests/languages/magik/keyword-variable_feature.test @@ -0,0 +1,11 @@ +_class _dynamic _global _import _local + +---------------------------------------------------- + +[ + ["keyword-variable", "_class"], ["keyword-variable", "_dynamic"], ["keyword-variable", "_global"], ["keyword-variable", "_import"], ["keyword-variable", "_local"] +] + +---------------------------------------------------- + +Checks for keyword variables. diff --git a/tests/languages/magik/keyword_feature.test b/tests/languages/magik/keyword_feature.test index caaa6600af..b7d0272536 100644 --- a/tests/languages/magik/keyword_feature.test +++ b/tests/languages/magik/keyword_feature.test @@ -1,4 +1,3 @@ -_class _dynamic _global _import _local _block _endblock _elif _else _endif _if _then _and _andif _not _or _orif _xor @@ -17,7 +16,6 @@ _allresults _gather _optional _scatter ---------------------------------------------------- [ - ["keyword", "_class"], ["keyword", "_dynamic"], ["keyword", "_global"], ["keyword", "_import"], ["keyword", "_local"], ["keyword", "_block"], ["keyword", "_endblock"], ["keyword", "_elif"], ["keyword", "_else"], ["keyword", "_endif"], ["keyword", "_if"], ["keyword", "_then"], ["keyword", "_and"], ["keyword", "_andif"], ["keyword", "_not"], ["keyword", "_or"], ["keyword", "_orif"], ["keyword", "_xor"], diff --git a/tests/languages/magik/pragma.test b/tests/languages/magik/pragma_feature.test similarity index 100% rename from tests/languages/magik/pragma.test rename to tests/languages/magik/pragma_feature.test diff --git a/tests/languages/magik/slot_feature.test b/tests/languages/magik/slot_feature.test index a2c3a44e0f..ea516b3adc 100644 --- a/tests/languages/magik/slot_feature.test +++ b/tests/languages/magik/slot_feature.test @@ -1,4 +1,6 @@ .slot_name +.embedded? +.slot_name.some_method some_class.some_method(.slot_name) some_class.some_method(_optional .slot_name, .another_slot_name) {.slot_name, some_other_variable, .another_slot_name} @@ -8,11 +10,12 @@ _global some_variable; some_variable << .slot_name [ ["slot", ".slot_name"], + ["slot", ".embedded?"], + ["slot", ".slot_name"], ".", ["function", "some_method"], ["variable", "some_class"], ".", ["function", "some_method"], ["punctuation", "("], ["slot", ".slot_name"], ["punctuation", ")"], ["variable", "some_class"], ".", ["function", "some_method"], ["punctuation", "("], ["keyword", "_optional"], ["slot", ".slot_name"], ["punctuation", ","], ["slot", ".another_slot_name"], ["punctuation", ")"], ["punctuation", "{"], ["slot", ".slot_name"], ["punctuation", ","], ["variable", "some_other_variable"], ["punctuation", ","], ["slot", ".another_slot_name"], ["punctuation", "}"], - ["keyword", "_global"], ["declaration", "some_variable"], ["punctuation", ";"], ["variable", "some_variable"], ["operator", "<<"], ["slot", ".slot_name"] - + ["keyword-variable", "_global"], ["declaration", "some_variable"], ["punctuation", ";"], ["variable", "some_variable"], ["operator", "<<"], ["slot", ".slot_name"] ] ---------------------------------------------------- diff --git a/tests/languages/magik/symbol_feature.test b/tests/languages/magik/symbol_feature.test index d6c11a743f..9e50aaee66 100644 --- a/tests/languages/magik/symbol_feature.test +++ b/tests/languages/magik/symbol_feature.test @@ -3,6 +3,7 @@ :kleenean?? :int!internal :|piped| +:|123| :int|!|internal :new|()| :|A|b|c ||()| @@ -24,6 +25,7 @@ ["symbol", ":kleenean??"], ["symbol", ":int!internal"], ["symbol", ":|piped|"], + ["symbol", ":|123|"], ["symbol", ":int|!|internal"], ["symbol", ":new|()|"], ["symbol", ":|A|b|c ||()|"], diff --git a/tests/languages/magik/unset_feature.test b/tests/languages/magik/unset_feature.test index e57fb2b9bc..e03e1ea5e2 100644 --- a/tests/languages/magik/unset_feature.test +++ b/tests/languages/magik/unset_feature.test @@ -8,8 +8,8 @@ _UnseT [ ["unset", "_unset"], ["unset", "_UnseT"], - ["punctuation", "("], ["unset", "_unset"], ["punctuation", ")"], - ["punctuation", "{"], ["unset", "_unset"], ["punctuation", ","], ["unset", "_unset"], ["punctuation", "}"] + ["punctuation", "("], ["unset", "_unset"], ["punctuation", ")"], + ["punctuation", "{"], ["unset", "_unset"], ["punctuation", ","], ["unset", "_unset"], ["punctuation", "}"] ] ---------------------------------------------------- diff --git a/tests/languages/magik/variable_feature.test b/tests/languages/magik/variable_feature.test index 492453997c..92f64afc71 100644 --- a/tests/languages/magik/variable_feature.test +++ b/tests/languages/magik/variable_feature.test @@ -1,28 +1,26 @@ -!terminal! -|!terminal!| -|!terminal|! -!|terminal|! -!||! -sw:gis_program_manager a_name anotherName some_var +|0| +|123| +|a| +|aBc| +|16r0000FFFF| coords3d_rope.new_with(coordinate3d.new(0, 0, 0), coordinate3d.new(10, 10, 10)) ---------------------------------------------------- [ - ["variable", "!terminal!"], - ["variable", "|!terminal!|"], - ["variable", "|!terminal|!"], - ["variable", "!|terminal|!"], - ["variable", "!||!"], - ["variable", "sw:gis_program_manager"], ["variable", "a_name"], ["variable", "anotherName"], ["variable", "some_var"], - ["variable", "coords3d_rope"], ".", ["function", "new_with"], ["punctuation", "("], - ["variable", "coordinate3d"], ".", ["function", "new"], ["punctuation", "("], ["number", "0"], ["punctuation", ","], ["number", "0"], ["punctuation", ","], ["number", "0"], ["punctuation", ")"], ["punctuation", ","], + ["variable", "|0|"], + ["variable", "|123|"], + ["variable", "|a|"], + ["variable", "|aBc|"], + ["variable", "|16r0000FFFF|"], + ["variable", "coords3d_rope"], ".", ["function", "new_with"], ["punctuation", "("], + ["variable", "coordinate3d"], ".", ["function", "new"], ["punctuation", "("], ["number", "0"], ["punctuation", ","], ["number", "0"], ["punctuation", ","], ["number", "0"], ["punctuation", ")"], ["punctuation", ","], ["variable", "coordinate3d"], ".", ["function", "new"], ["punctuation", "("], ["number", "10"], ["punctuation", ","], ["number", "10"], ["punctuation", ","], ["number", "10"], ["punctuation", ")"], ["punctuation", ")"] ]