scopeName: source.squiggle patterns: - include: "#statement" - include: "#expression" - include: "#comment-block" - include: "#comment-line" repository: statement: patterns: - include: "#let" - include: "#defun" expression: patterns: - include: "#integer" - include: "#float" - include: "#string" - include: "#block" - include: "#function-call" - include: "#keywords" let: match: ^\s*(\w+)\s*= captures: "1": name: variable.other.squiggle defun: begin: ^\s*(\w+)\s*(\() end: (\))\s*= beginCaptures: "1": name: entity.name.function.squiggle "2": name: punctuation.definition.arguments.begin.squiggle endCaptures: "1": name: punctuation.definition.arguments.end.squiggle patterns: - include: "#array-parameters" array-parameters: begin: \b([\$_a-z]+[\$_a-zA-Z0-9]*) end: \s*(?:(,)|(?=\))) beginCaptures: "1": name: variable.parameter.function.squiggle function-call: begin: (\w+)\s*(\() end: (\)) beginCaptures: "1": name: entity.name.function.squiggle "2": name: punctuation.definition.arguments.begin.squiggle endCaptures: "1": name: punctuation.definition.arguments.end.squiggle patterns: - include: "$self" comment-block: begin: /\* end: \*/ name: comment.block.squiggle comment-line: patterns: - include: "#comment-line-double-slash" - include: "#comment-line-number-sign" comment-line-double-slash: match: //.* name: comment.line.double-slash.squiggle comment-line-number-sign: match: "#.*" name: comment.line.number-sign.squiggle block: begin: "{" end: "}" beginCaptures: "0": name: punctuation.definition.block.squiggle endCaptures: "0": name: punctuation.definition.block.squiggle patterns: - include: "$self" keywords: match: \b(if|then|else|to)\b name: keyword.control.squiggle integer: match: \b\d+([_a-zA-Z]+[_a-zA-Z0-9]*)? name: constant.numeric.integer.squiggle float: match: \b(\d+\.\d*|\.?\d+)([eE]-?\d+)?([_a-zA-Z]+[_a-zA-Z0-9]*)? name: constant.numeric.float.squiggle string: match: \".*?\" name: string.quoted.double.squiggle