diff --git a/src/functions.YAML-tmLanguage.j2 b/src/functions.YAML-tmLanguage.j2 index 350de36..d35254a 100644 --- a/src/functions.YAML-tmLanguage.j2 +++ b/src/functions.YAML-tmLanguage.j2 @@ -1,6 +1,7 @@ # yamllint disable rule:line-length --- repository: + parens: &parens_rules [] functions: patterns: - include: "#builtins" @@ -33,30 +34,14 @@ repository: user-defined: patterns: - - begin: '([[:alpha:]][[:alnum:]_]*)\b(?=\s*\(|\(\s*\{|\{\s*\()' - end: '(?<=$|=)' + begin: '([[:alpha:]][[:alnum:]_]*)\b(?=(\s*\(|\(\s*\{|\{\s*\()[^=]*=)' + end: '(?<=\=)' beginCaptures: 1: name: entity.name.function.user.parigp name: meta.function.parigp patterns: - - - begin: '(\()' - beginCaptures: - 0: - name: punctuation.section.parens.begin.parigp - 1: - name: punctuation.definition.parameters.begin.parigp - end: '(\))(?=\s*=)' - endCaptures: - 0: - name: punctuation.section.parens.end.parigp - 1: - name: punctuation.definition.parameters.end.parigp - name: meta.parameters.parigp - patterns: - - include: '#parens' - - include: '#function-vars' + - include: '#function-vars' - begin: '([[:alpha:]][[:alnum:]_]*)\b(?=\s*=\s*[^\->]+\s*\-\s*>)' end: '(?<=\->)' @@ -65,17 +50,33 @@ repository: name: entity.name.function.user.lambda.parigp name: meta.function.lambda.parigp patterns: - - include: '#parens' + - + match: '(\->)' + name: keyword.operator.lambda - include: '#function-vars' repository: function-vars: patterns: - - match: '([[:alpha:]][[:alnum:]_]*)\s*' - captures: - 1: - name: variable.parameter.function.parigp - - - match: ',' - name: punctuation.separator.parigp + <<: *parens_rules + patterns: + - include: '#function-vars' + - include: '#general' + - include: '#literals' + - include: '#operators' - include: '#type-hints' + - + match: '(?- https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json diff --git a/src/operators.YAML-tmLanguage b/src/operators.YAML-tmLanguage index e05ed45..aa5abb8 100644 --- a/src/operators.YAML-tmLanguage +++ b/src/operators.YAML-tmLanguage @@ -8,11 +8,11 @@ repository: 1: name: keyword.operator.factorial.parigp - - match: '(&&|\|\||!\b)' + match: '(&&|\|\|)|(!)\b' name: keyword.operator.logical.parigp - - match: '(\->)' - name: keyword.operator.lambda + match: '(?=|<|>)' name: keyword.operator.comparison.parigp diff --git a/src/type-hints.YAML-tmLanguage.j2 b/src/type-hints.YAML-tmLanguage.j2 index 9f4bfc8..8a1cb03 100644 --- a/src/type-hints.YAML-tmLanguage.j2 +++ b/src/type-hints.YAML-tmLanguage.j2 @@ -3,7 +3,7 @@ repository: type-hints: patterns: - - match: '\:\s*\b({{ scopes["support.type"] | join("|") }})\b' + match: '\s*\b({{ scopes["support.type"] | join("|") }})\b' captures: 1: name: support.type.parigp diff --git a/tests/comments.test.gp b/tests/comments.test.gp index 6fa42c8..0be0f9c 100644 --- a/tests/comments.test.gp +++ b/tests/comments.test.gp @@ -1,6 +1,6 @@ ## SYNTAX TEST "source.parigp" "Comments" - \\ one-line comment, rest of line ignored + \\ One-line comment, rest of line ignored ##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp ## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp @@ -11,6 +11,16 @@ Multi-line comment: Line 2 ## ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp comment.block.parigp /* Nested multi-line comments shouldn't confuse the parser */ -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp comment.block.parigp +## ^^ source.parigp comment.block.parigp comment.block.parigp punctuation.definition.comment.begin.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp comment.block.parigp comment.block.parigp +## ^^ source.parigp comment.block.parigp comment.block.parigp punctuation.definition.comment.end.parigp */ ##^^ source.parigp comment.block.parigp punctuation.definition.comment.end.parigp + + (/* Comment inside expression */ 1) +##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^ source.parigp meta.parens.parigp comment.block.parigp punctuation.definition.comment.begin.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp meta.parens.parigp comment.block.parigp +## ^^ source.parigp meta.parens.parigp comment.block.parigp punctuation.definition.comment.end.parigp +## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp diff --git a/tests/functions.test.gp b/tests/functions.test.gp index a6e739d..93b116f 100644 --- a/tests/functions.test.gp +++ b/tests/functions.test.gp @@ -12,10 +12,11 @@ ## ^ source.parigp keyword.operator.assignment.parigp ## ^^^ source.parigp entity.name.function.builtins.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^ source.parigp constant.numeric.int.parigp -## ^ ^ source.parigp markup.punctuation.parigp -## ^ source.parigp constant.character.whitespace.parigp +## ^ ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp x.mod ##^ source.parigp variable.name.parigp @@ -26,7 +27,7 @@ ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.parigp +## ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp ## ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.parens.parigp meta.brackets.parigp keyword.operator.arithmetic.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.brackets.end.parigp @@ -37,19 +38,94 @@ ##^^^^^^^^^^^ source.parigp keyword.control.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp + + times = ((x), (y: t_REAL), {sign: t_INT = +1}) -> { return(x * y * sign); } +##^^^^^ source.parigp meta.function.lambda.parigp entity.name.function.user.lambda.parigp +## ^ ^ source.parigp meta.function.lambda.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.lambda.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp meta.function.lambda.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ ^ source.parigp meta.function.lambda.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp markup.annotation.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^^ source.parigp meta.function.lambda.parigp meta.parens.parigp support.type.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.begin.parigp +## ^^^^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp markup.annotation.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp support.type.parigp +## ^ ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.numeric.int.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp meta.function.parameter.optional.end.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp constant.character.whitespace.parigp +## ^^ source.parigp keyword.operator.lambda +## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp +## ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^^^^^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ ^ source.parigp meta.block.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp +## ^ source.parigp punctuation.section.group.end.parigp + + \\ Code from https://stackoverflow.com/a/65401338 +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp + f(a)={my(e); [ispower(a,3,&e), e]} +##^ source.parigp meta.function.parigp entity.name.function.user.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp punctuation.section.group.begin.parigp +## ^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp +## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^^^^^^^ source.parigp meta.block.parigp meta.brackets.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp keyword.operator.pointer.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^ source.parigp punctuation.section.group.end.parigp \\ Code from https://stackoverflow.com/a/67286398 ##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp - counts_for(v: t_VEC, lower: t_INT, upper: t_INT) = { -##^^^^^^^^^^ source.parigp entity.name.function.user.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^^^^^ ^^^^^ source.parigp meta.parens.parigp variable.name.parigp -## ^^^^^ ^^^^^ ^^^^^ source.parigp meta.parens.parigp support.type.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp + counts_for((v: t_VEC), lower: t_INT, upper: t_INT) = { +##^^^^^^^^^^ source.parigp meta.function.parigp entity.name.function.user.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp markup.annotation.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp meta.function.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ ^ ^ ^ source.parigp meta.function.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^ ^^^^^ source.parigp meta.function.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ ^ source.parigp meta.function.parigp meta.parens.parigp markup.annotation.parigp +## ^^^^^ ^^^^^ source.parigp meta.function.parigp meta.parens.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp + my(counts = vector(1+upper-lower)); ## ^^ source.parigp meta.block.parigp keyword.control.parigp ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp @@ -60,14 +136,14 @@ ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.arithmetic.parigp ## ^^^^^ ^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp ## ^^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp markup.punctuation.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp for(i=1, #v, counts[1+v[i]-lower]++); ## ^^^ source.parigp meta.block.parigp keyword.control.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ ^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.assignment.parigp ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ ^ ^ source.parigp meta.block.parigp markup.punctuation.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp ## ^ source.parigp meta.block.parigp keyword.operator.cardinality.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp keyword.operator.arithmetic.parigp @@ -77,19 +153,19 @@ ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp ## ^^ source.parigp meta.block.parigp keyword.operator.increment-decrement.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp markup.punctuation.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp vector(#counts, i, [i-1, counts[i]]) ## ^^^^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.cardinality.parigp ## ^^^^^^ ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp markup.punctuation.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp ## ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp keyword.operator.arithmetic.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp @@ -97,57 +173,65 @@ ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp }; ##^ source.parigp punctuation.section.group.end.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp - counts_for1(v: t_VEC) = { + counts_for1({v: t_VEC}) = { ##^^^^^^^^^^^ source.parigp entity.name.function.user.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp variable.name.parigp -## ^^^^^ source.parigp support.type.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^ source.parigp punctuation.section.group.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp markup.annotation.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.end.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp counts_for(v, vecmin(v), vecmax(v)) -## ^^^^^^^^^^ source.parigp meta.block.parigp entity.name.function.user.parigp +## ^^^^^^^^^^ source.parigp meta.block.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp ## ^^^^^^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp }; ##^ source.parigp punctuation.section.group.end.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp most_frequent(v: t_VEC) = { -##^^^^^^^^^^^^^ source.parigp entity.name.function.user.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp variable.name.parigp -## ^^^^^ source.parigp support.type.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp +##^^^^^^^^^^^^^ source.parigp meta.function.parigp entity.name.function.user.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp markup.annotation.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp meta.function.parigp meta.parens.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp my(counts=counts_for1(v)); ## ^^ source.parigp meta.block.parigp keyword.control.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.assignment.parigp -## ^^^^^^^^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.user.parigp +## ^^^^^^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp markup.punctuation.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp vecsort(counts, [2], 4)[1][1] ## ^^^^^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp ## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp @@ -159,7 +243,7 @@ ## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp }; ##^ source.parigp punctuation.section.group.end.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp \\ Code from https://stackoverflow.com/a/72443498 @@ -172,31 +256,31 @@ ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.parigp +## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp ## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp N = 4; pred = (elt) -> elt > N; ##^^^^ source.parigp entity.name.function.user.lambda.parigp ## ^ ^ ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp ## ^ source.parigp keyword.operator.assignment.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^^ source.parigp meta.parens.parigp variable.name.parigp +## ^^^ source.parigp meta.function.lambda.parigp meta.parens.parigp variable.parameter.function.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp ## ^^ source.parigp keyword.operator.lambda ## ^^^ ^ source.parigp variable.name.parigp ## ^ source.parigp keyword.operator.comparison.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp #select(pred, M[,2]) ##^ source.parigp keyword.operator.cardinality.parigp ## ^^^^^^ source.parigp entity.name.function.builtins.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^^^^ ^ source.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.parens.parigp markup.punctuation.parigp +## ^ source.parigp meta.parens.parigp markup.punctuation.separator.parigp ## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.parigp +## ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp ## ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp ## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp @@ -206,21 +290,25 @@ ## ^ ^ ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp ## ^ source.parigp keyword.operator.assignment.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^ source.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.parens.parigp markup.punctuation.parigp +## ^ ^ source.parigp meta.function.lambda.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.lambda.parigp meta.parens.parigp markup.punctuation.separator.parigp ## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp ## ^^ source.parigp keyword.operator.lambda ## ^ ^ source.parigp variable.name.parigp ## ^ source.parigp keyword.operator.comparison.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp - greater10 = x -> x > 10; -##^^^^^^^^^ source.parigp entity.name.function.user.lambda.parigp -## ^ ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^ ^ source.parigp variable.name.parigp -## ^^ source.parigp keyword.operator.lambda -## ^ source.parigp keyword.operator.comparison.parigp -## ^^ source.parigp constant.numeric.int.parigp -## ^ source.parigp markup.punctuation.parigp + (greater10 = x -> x > 10); +##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^^^^^^^^ source.parigp entity.name.function.user.lambda.parigp +## ^ ^ source.parigp meta.parens.parigp meta.function.lambda.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.parigp variable.parameter.function.parigp +## ^^ source.parigp keyword.operator.lambda +## ^ ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp variable.name.parigp +## ^ source.parigp keyword.operator.comparison.parigp +## ^^ source.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp diff --git a/tests/operators.test.gp b/tests/operators.test.gp index 0a1e06d..d6d06f8 100644 --- a/tests/operators.test.gp +++ b/tests/operators.test.gp @@ -26,7 +26,7 @@ ## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp keyword.operator.logical.parigp ## ^^^^ source.parigp meta.parens.parigp variable.name.parigp -## ^^ source.parigp meta.parens.parigp markup.punctuation.parigp +## ^^ source.parigp meta.parens.parigp markup.punctuation.separator.parigp ## ^^^^^ source.parigp meta.parens.parigp entity.name.function.builtins.parigp ## ^ source.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^^^^^^ source.parigp meta.parens.parigp meta.parens.parigp constant.character.escape.parigp @@ -50,7 +50,7 @@ ##^ source.parigp variable.name.parigp ## ^ source.parigp keyword.operator.assignment.parigp ## ^^ source.parigp constant.numeric.int.parigp -## ^ source.parigp markup.punctuation.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp [1..100] ##^ source.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp @@ -61,7 +61,7 @@ [1, 2, 3; 4, 5, 6]~ ##^ source.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^ ^ ^ ^ ^ ^ source.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ ^ ^ ^ ^ source.parigp meta.brackets.parigp markup.punctuation.parigp +## ^ ^ ^ ^ ^ source.parigp meta.brackets.parigp markup.punctuation.separator.parigp ## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp ## ^ source.parigp keyword.operator.transpose.parigp @@ -73,7 +73,7 @@ ## ^ ^ source.parigp meta.brackets.parigp meta.parens.parigp constant.numeric.int.parigp ## ^ source.parigp meta.brackets.parigp meta.parens.parigp punctuation.section.parens.end.parigp ## ^ source.parigp meta.brackets.parigp keyword.operator.derivative.parigp -## ^ ^ ^ source.parigp meta.brackets.parigp markup.punctuation.parigp +## ^ ^ ^ source.parigp meta.brackets.parigp markup.punctuation.separator.parigp ## ^ ^ ^ source.parigp meta.brackets.parigp constant.character.whitespace.parigp ## ^^ source.parigp meta.brackets.parigp variable.name.parigp ## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp