Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 71 additions & 45 deletions src/languages/magik.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,76 +9,112 @@ 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!
],
Comment thread
sebastiaanspeck marked this conversation as resolved.

'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\d+(?:\.\d+)?(?:[e&][+-]?\d+)?\b|\b(?:[2-9]|[12]\d|3[0-6])r[a-z0-9]+\b)/i,

'operator': [
/_(?:and|andif|or|orif|xor)<</i, /(?:\*\*\^?|\*\^?|\/\^?|_mod\^?|_div\^?|-\^?|\+\^?)<</i, /\^?<</, // assignment operators
/<>/, />=/, /<=/, /</, /~=/, /=/, // relational operators
/\*\*/, /\*/, /\//, // arithmetic operators
/\+/, /-/, /~/, // unary operators
/_(?:and|andif|or|orif|xor)<</i,
/(?:\*\*\^?|\*\^?|\/\^?|_mod\^?|_div\^?|-\^?|\+\^?)<</i,
/\^?<</,
/<>/,
/>=/,
/<=/,
/</,
/~=/,
/=/,
/\*\*/,
/\*/,
/\//,
/\+/,
/-/,
/~/,
],

'keyword-operator': [
{ pattern: /\b_(?:cf|is|isnt)\b/i, alias: 'keyword' }, // comparison
{ pattern: /\b_(?:div|mod)\b/i, alias: 'keyword' } // math
{ pattern: /\b_(?:div|mod)\b/i, alias: 'keyword' }, // math
],

'keyword-variable': {
pattern: /\b_(?:class|dynamic|global|import|local)\b/i,
alias: 'keyword',
},

'keyword': [
/\b_(?:class|dynamic|global|import|local)\b/i, // variables
/\b_(?:block|endblock)\b/i, // block
/\b_(?:elif|else|endif|if|then)\b/i, // if
/\b_(?:and|andif|not|or|orif|xor)\b/i, // logical operators
/\b_(?:continue|endloop|finally|for|leave|loop|loopbody|over|while)\b/i, // loop
/\b_(?:default|handling)\b/i, // handling
/\b_(?:catch|endcatch)\b/i, // catch
/\b_throw\b/i, // throw
/>>/, /\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,
Expand All @@ -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 },
],
}
},
};
28 changes: 15 additions & 13 deletions tests/languages/magik/constant_feature.test
Original file line number Diff line number Diff line change
@@ -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"]
]

----------------------------------------------------
Expand Down
10 changes: 7 additions & 3 deletions tests/languages/magik/declaration_feature.test
Original file line number Diff line number Diff line change
@@ -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"]
]

----------------------------------------------------
Expand Down
21 changes: 21 additions & 0 deletions tests/languages/magik/dynamic-variable_feature.test
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 2 additions & 0 deletions tests/languages/magik/function_feature.test
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ variable.method_name?
variable.method_name()
variable.|methodName|()
object.method
object.int!method
object.getName
object.|getName|
object.method<< _unset
Expand All @@ -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"],
Expand Down
12 changes: 6 additions & 6 deletions tests/languages/magik/global-reference_feature.test
Original file line number Diff line number Diff line change
@@ -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|"]
]

----------------------------------------------------
Expand Down
21 changes: 21 additions & 0 deletions tests/languages/magik/global-variable_feature.test
Original file line number Diff line number Diff line change
@@ -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.
11 changes: 11 additions & 0 deletions tests/languages/magik/keyword-variable_feature.test
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 0 additions & 2 deletions tests/languages/magik/keyword_feature.test
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
_class _dynamic _global _import _local
_block _endblock
_elif _else _endif _if _then
_and _andif _not _or _orif _xor
Expand All @@ -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"],
Expand Down
7 changes: 5 additions & 2 deletions tests/languages/magik/slot_feature.test
Original file line number Diff line number Diff line change
@@ -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}
Expand All @@ -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"]
]

----------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions tests/languages/magik/symbol_feature.test
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
:kleenean??
:int!internal
:|piped|
:|123|
:int|!|internal
:new|()|
:|A|b|c ||()|
Expand All @@ -24,6 +25,7 @@
["symbol", ":kleenean??"],
["symbol", ":int!internal"],
["symbol", ":|piped|"],
["symbol", ":|123|"],
["symbol", ":int|!|internal"],
["symbol", ":new|()|"],
["symbol", ":|A|b|c ||()|"],
Expand Down
Loading
Loading