From 055efe8cd92fb98343a6c88560101f64465f73d6 Mon Sep 17 00:00:00 2001 From: Florian Loitsch Date: Mon, 7 Aug 2023 19:23:08 +0200 Subject: [PATCH] Support dash-identifiers in code mirror. (#221) Support dash-identifiers, and also fix the constant/type heuristics. They weren't checking the whole input. As long as a subpart matched they would trigger. This meant that we colored types very often as constants. --- code_mirror/toit.js | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/code_mirror/toit.js b/code_mirror/toit.js index 9c700ce..711a3fc 100644 --- a/code_mirror/toit.js +++ b/code_mirror/toit.js @@ -45,12 +45,12 @@ var atoms = makeJsObject("true|false|null"); var specialVars = makeJsObject("this|super|it"); - var IDENTIFIER = /[a-zA-Z_]\w*/; - var TYPE = /[a-zA-Z_]\w*(\.[a-zA-Z_]\w*)?/; + var IDENTIFIER = /[a-zA-Z_]([\w-]*\w)?/; + var TYPE = /[a-zA-Z_]([\w-]*\w)?(\.[a-zA-Z_]([\w-]*\w)?)?/; var OVERRIDABLE_OPERATOR = /==|>=|<=|<<|>>>|>>|\*|\+|-|%|\/|<|>|&|\||\^|~|\[\]\=|\[\]|\[\.\.\]/ - var CONSTANT_HEURISTIC = /_?[A-Z][A-Z_0-9]+/; - var TYPE_HEURISTIC = /_?[A-Z]\w*[a-z]\w*/; + var CONSTANT_HEURISTIC = /^_?[A-Z][A-Z_0-9-]*$/; + var TYPE_HEURISTIC = /^_?[A-Z][\w-]*[a-z][\w-]*$/; var CONTROL = /[?:;]/; function isKeyword(str) { @@ -419,15 +419,10 @@ if (isKeyword(id)) return "keyword"; if (isSpecialVar(id)) return "special_var"; if (isAtom(id)) return "atom"; - if (id.match(CONSTANT_HEURISTIC)) { - return "constant"; - } - if (id.match(TYPE_HEURISTIC)) { - return "type"; - } - if (stream.match(/[ ]*:?:=/, false)) { - return "declaration"; - } + if (id.match(CONSTANT_HEURISTIC)) return "constant"; + if (id.match(TYPE_HEURISTIC)) return "type"; + if (stream.match(/[ ]*:?:=/, false)) return "declaration"; + if (stream.match(/[ ]*[/][ ]*[\w_.]+[?]?[ ]*:?:=/, false)) { state.context.push([localAnnotation, -1]); state.subState.push(LOCAL_ANNOTATION_DIV);