{
  "scopeName": "source.novalang",
  "name": "NovaLang",
  "patterns": [
    { "include": "#keywords" },
    { "include": "#strings" },
    { "include": "#numbers" },
    { "include": "#comments" },
    { "include": "#brackets" },
    { "include": "#identifiers" }
  ],
  "repository": {
    "keywords": {
      "patterns": [
        {
          "name": "keyword.control.novalang",
          "match": "\\b(component|ui|test|import|export|let|const|if|else|while|for|function|return|true|false|null|print|ask|api|try|catch|GET|POST|PUT|DELETE)\\b"
        }
      ]
    },
    "strings": {
      "patterns": [
        {
          "name": "string.quoted.double.novalang",
          "begin": "\\\"",
          "end": "\\\"",
          "patterns": [
            { "name": "constant.character.escape.novalang", "match": "\\\\." }
          ]
        },
        {
          "name": "string.quoted.single.novalang",
          "begin": "\\'",
          "end": "\\'",
          "patterns": [
            { "name": "constant.character.escape.novalang", "match": "\\\\." }
          ]
        }
      ]
    },
    "numbers": {
      "patterns": [
        {
          "name": "constant.numeric.novalang",
          "match": "\\b[0-9]+(\\.[0-9]+)?\\b"
        }
      ]
    },
    "comments": {
      "patterns": [
        {
          "name": "comment.line.double-slash.novalang",
          "begin": "//",
          "end": "(?=$|\\n)"
        }
      ]
    },
    "brackets": {
      "patterns": [
        { "name": "punctuation.section.braces.begin.novalang", "match": "\\{" },
        { "name": "punctuation.section.braces.end.novalang", "match": "\\}" },
        { "name": "punctuation.section.parens.begin.novalang", "match": "\\(" },
        { "name": "punctuation.section.parens.end.novalang", "match": "\\)" },
        { "name": "punctuation.section.brackets.begin.novalang", "match": "\\[" },
        { "name": "punctuation.section.brackets.end.novalang", "match": "\\]" }
      ]
    },
    "identifiers": {
      "patterns": [
        {
          "name": "variable.other.novalang",
          "match": "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b"
        }
      ]
    }
  }
}
