{
  "displayName": "CodeQL",
  "fileTypes": [
    "ql",
    "qll"
  ],
  "name": "codeql",
  "patterns": [
    {
      "include": "#module-member"
    }
  ],
  "repository": {
    "abstract": {
      "match": "\\babstract(?![0-9A-Z_a-z])",
      "name": "storage.modifier.abstract.ql"
    },
    "additional": {
      "match": "\\badditional(?![0-9A-Z_a-z])",
      "name": "storage.modifier.additional.ql"
    },
    "and": {
      "match": "\\band(?![0-9A-Z_a-z])",
      "name": "keyword.other.and.ql"
    },
    "annotation": {
      "patterns": [
        {
          "include": "#bindingset-annotation"
        },
        {
          "include": "#language-annotation"
        },
        {
          "include": "#pragma-annotation"
        },
        {
          "include": "#annotation-keyword"
        }
      ]
    },
    "annotation-keyword": {
      "patterns": [
        {
          "include": "#abstract"
        },
        {
          "include": "#additional"
        },
        {
          "include": "#bindingset"
        },
        {
          "include": "#cached"
        },
        {
          "include": "#default"
        },
        {
          "include": "#deprecated"
        },
        {
          "include": "#external"
        },
        {
          "include": "#final"
        },
        {
          "include": "#language"
        },
        {
          "include": "#library"
        },
        {
          "include": "#override"
        },
        {
          "include": "#pragma"
        },
        {
          "include": "#private"
        },
        {
          "include": "#query"
        },
        {
          "include": "#signature"
        },
        {
          "include": "#transient"
        }
      ]
    },
    "any": {
      "match": "\\bany(?![0-9A-Z_a-z])",
      "name": "keyword.quantifier.any.ql"
    },
    "arithmetic-operator": {
      "match": "[-%*+/]",
      "name": "keyword.operator.arithmetic.ql"
    },
    "as": {
      "match": "\\bas(?![0-9A-Z_a-z])",
      "name": "keyword.other.as.ql"
    },
    "asc": {
      "match": "\\basc(?![0-9A-Z_a-z])",
      "name": "keyword.order.asc.ql"
    },
    "at-lower-id": {
      "match": "@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])"
    },
    "avg": {
      "match": "\\bavg(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.avg.ql"
    },
    "bindingset": {
      "match": "\\bbindingset(?![0-9A-Z_a-z])",
      "name": "storage.modifier.bindingset.ql"
    },
    "bindingset-annotation": {
      "begin": "\\b(bindingset(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#bindingset"
            }
          ]
        }
      },
      "end": "(?!(?:\\s|$|/[*/])|\\[)|(?<=])",
      "name": "meta.block.bindingset-annotation.ql",
      "patterns": [
        {
          "include": "#bindingset-annotation-body"
        },
        {
          "include": "#non-context-sensitive"
        }
      ]
    },
    "bindingset-annotation-body": {
      "begin": "(\\[)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-bracket"
            }
          ]
        }
      },
      "end": "(])",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-bracket"
            }
          ]
        }
      },
      "name": "meta.block.bindingset-annotation-body.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "variable.parameter.ql"
        }
      ]
    },
    "boolean": {
      "match": "\\bboolean(?![0-9A-Z_a-z])",
      "name": "keyword.type.boolean.ql"
    },
    "by": {
      "match": "\\bby(?![0-9A-Z_a-z])",
      "name": "keyword.order.by.ql"
    },
    "cached": {
      "match": "\\bcached(?![0-9A-Z_a-z])",
      "name": "storage.modifier.cached.ql"
    },
    "class": {
      "match": "\\bclass(?![0-9A-Z_a-z])",
      "name": "keyword.other.class.ql"
    },
    "class-body": {
      "begin": "(\\{)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-brace"
            }
          ]
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-brace"
            }
          ]
        }
      },
      "name": "meta.block.class-body.ql",
      "patterns": [
        {
          "include": "#class-member"
        }
      ]
    },
    "class-declaration": {
      "begin": "\\b(class(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#class"
            }
          ]
        }
      },
      "end": "(?<=[;}])",
      "name": "meta.block.class-declaration.ql",
      "patterns": [
        {
          "include": "#class-body"
        },
        {
          "include": "#extends-clause"
        },
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.class.ql"
        }
      ]
    },
    "class-member": {
      "patterns": [
        {
          "include": "#predicate-or-field-declaration"
        },
        {
          "include": "#annotation"
        },
        {
          "include": "#non-context-sensitive"
        }
      ]
    },
    "close-angle": {
      "match": ">",
      "name": "punctuation.anglebracket.close.ql"
    },
    "close-brace": {
      "match": "}",
      "name": "punctuation.curlybrace.close.ql"
    },
    "close-bracket": {
      "match": "]",
      "name": "punctuation.squarebracket.close.ql"
    },
    "close-paren": {
      "match": "\\)",
      "name": "punctuation.parenthesis.close.ql"
    },
    "comma": {
      "match": ",",
      "name": "punctuation.separator.comma.ql"
    },
    "comment": {
      "patterns": [
        {
          "begin": "/\\*\\*",
          "end": "\\*/",
          "name": "comment.block.documentation.ql",
          "patterns": [
            {
              "begin": "(?<=/\\*\\*)([^*]|\\*(?!/))*$",
              "patterns": [
                {
                  "match": "\\G\\s*(@\\S+)",
                  "name": "keyword.tag.ql"
                }
              ],
              "while": "(^|\\G)\\s*([^*]|\\*(?!/))(?=([^*]|\\*(?!/))*$)"
            }
          ]
        },
        {
          "begin": "/\\*",
          "end": "\\*/",
          "name": "comment.block.ql"
        },
        {
          "match": "//.*$",
          "name": "comment.line.double-slash.ql"
        }
      ]
    },
    "comment-start": {
      "match": "/[*/]"
    },
    "comparison-operator": {
      "match": "(?:|!)=",
      "name": "keyword.operator.comparison.ql"
    },
    "concat": {
      "match": "\\bconcat(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.concat.ql"
    },
    "count": {
      "match": "\\bcount(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.count.ql"
    },
    "date": {
      "match": "\\bdate(?![0-9A-Z_a-z])",
      "name": "keyword.type.date.ql"
    },
    "default": {
      "match": "\\bdefault(?![0-9A-Z_a-z])",
      "name": "storage.modifier.default.ql"
    },
    "deprecated": {
      "match": "\\bdeprecated(?![0-9A-Z_a-z])",
      "name": "storage.modifier.deprecated.ql"
    },
    "desc": {
      "match": "\\bdesc(?![0-9A-Z_a-z])",
      "name": "keyword.order.desc.ql"
    },
    "dont-care": {
      "match": "\\b_(?![0-9A-Z_a-z])",
      "name": "variable.language.dont-care.ql"
    },
    "dot": {
      "match": "\\.",
      "name": "punctuation.accessor.ql"
    },
    "dotdot": {
      "match": "\\.\\.",
      "name": "punctuation.operator.range.ql"
    },
    "else": {
      "match": "\\belse(?![0-9A-Z_a-z])",
      "name": "keyword.other.else.ql"
    },
    "end-of-as-clause": {
      "match": "(?<=[0-9A-Z_a-z])(?![0-9A-Z_a-z])(?<!(?<![0-9A-Z_a-z])as)|(?=\\s*(?!/[*/]|\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z]))\\S)|(?=\\s*\\b(?:_(?![0-9A-Z_a-z])|and(?![0-9A-Z_a-z])|any(?![0-9A-Z_a-z])|as(?![0-9A-Z_a-z])|asc(?![0-9A-Z_a-z])|avg(?![0-9A-Z_a-z])|boolean(?![0-9A-Z_a-z])|by(?![0-9A-Z_a-z])|class(?![0-9A-Z_a-z])|concat(?![0-9A-Z_a-z])|count(?![0-9A-Z_a-z])|date(?![0-9A-Z_a-z])|desc(?![0-9A-Z_a-z])|else(?![0-9A-Z_a-z])|exists(?![0-9A-Z_a-z])|extends(?![0-9A-Z_a-z])|false(?![0-9A-Z_a-z])|float(?![0-9A-Z_a-z])|forall(?![0-9A-Z_a-z])|forex(?![0-9A-Z_a-z])|from(?![0-9A-Z_a-z])|if(?![0-9A-Z_a-z])|implies(?![0-9A-Z_a-z])|import(?![0-9A-Z_a-z])|in(?![0-9A-Z_a-z])|instanceof(?![0-9A-Z_a-z])|int(?![0-9A-Z_a-z])|max(?![0-9A-Z_a-z])|min(?![0-9A-Z_a-z])|module(?![0-9A-Z_a-z])|newtype(?![0-9A-Z_a-z])|none(?![0-9A-Z_a-z])|not(?![0-9A-Z_a-z])|or(?![0-9A-Z_a-z])|order(?![0-9A-Z_a-z])|predicate(?![0-9A-Z_a-z])|rank(?![0-9A-Z_a-z])|result(?![0-9A-Z_a-z])|select(?![0-9A-Z_a-z])|strictconcat(?![0-9A-Z_a-z])|strictcount(?![0-9A-Z_a-z])|strictsum(?![0-9A-Z_a-z])|string(?![0-9A-Z_a-z])|sum(?![0-9A-Z_a-z])|super(?![0-9A-Z_a-z])|then(?![0-9A-Z_a-z])|this(?![0-9A-Z_a-z])|true(?![0-9A-Z_a-z])|unique(?![0-9A-Z_a-z])|where(?![0-9A-Z_a-z])))"
    },
    "end-of-id": {
      "match": "(?![0-9A-Z_a-z])"
    },
    "exists": {
      "match": "\\bexists(?![0-9A-Z_a-z])",
      "name": "keyword.quantifier.exists.ql"
    },
    "expr-as-clause": {
      "begin": "\\b(as(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#as"
            }
          ]
        }
      },
      "end": "(?<=[0-9A-Z_a-z])(?![0-9A-Z_a-z])(?<!(?<![0-9A-Z_a-z])as)|(?=\\s*(?!/[*/]|\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z]))\\S)|(?=\\s*\\b(?:_(?![0-9A-Z_a-z])|and(?![0-9A-Z_a-z])|any(?![0-9A-Z_a-z])|as(?![0-9A-Z_a-z])|asc(?![0-9A-Z_a-z])|avg(?![0-9A-Z_a-z])|boolean(?![0-9A-Z_a-z])|by(?![0-9A-Z_a-z])|class(?![0-9A-Z_a-z])|concat(?![0-9A-Z_a-z])|count(?![0-9A-Z_a-z])|date(?![0-9A-Z_a-z])|desc(?![0-9A-Z_a-z])|else(?![0-9A-Z_a-z])|exists(?![0-9A-Z_a-z])|extends(?![0-9A-Z_a-z])|false(?![0-9A-Z_a-z])|float(?![0-9A-Z_a-z])|forall(?![0-9A-Z_a-z])|forex(?![0-9A-Z_a-z])|from(?![0-9A-Z_a-z])|if(?![0-9A-Z_a-z])|implies(?![0-9A-Z_a-z])|import(?![0-9A-Z_a-z])|in(?![0-9A-Z_a-z])|instanceof(?![0-9A-Z_a-z])|int(?![0-9A-Z_a-z])|max(?![0-9A-Z_a-z])|min(?![0-9A-Z_a-z])|module(?![0-9A-Z_a-z])|newtype(?![0-9A-Z_a-z])|none(?![0-9A-Z_a-z])|not(?![0-9A-Z_a-z])|or(?![0-9A-Z_a-z])|order(?![0-9A-Z_a-z])|predicate(?![0-9A-Z_a-z])|rank(?![0-9A-Z_a-z])|result(?![0-9A-Z_a-z])|select(?![0-9A-Z_a-z])|strictconcat(?![0-9A-Z_a-z])|strictcount(?![0-9A-Z_a-z])|strictsum(?![0-9A-Z_a-z])|string(?![0-9A-Z_a-z])|sum(?![0-9A-Z_a-z])|super(?![0-9A-Z_a-z])|then(?![0-9A-Z_a-z])|this(?![0-9A-Z_a-z])|true(?![0-9A-Z_a-z])|unique(?![0-9A-Z_a-z])|where(?![0-9A-Z_a-z])))",
      "name": "meta.block.expr-as-clause.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "variable.other.ql"
        }
      ]
    },
    "extends": {
      "match": "\\bextends(?![0-9A-Z_a-z])",
      "name": "keyword.other.extends.ql"
    },
    "extends-clause": {
      "begin": "\\b(extends(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#extends"
            }
          ]
        }
      },
      "end": "(?=\\{)",
      "name": "meta.block.extends-clause.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])|@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.ql"
        }
      ]
    },
    "external": {
      "match": "\\bexternal(?![0-9A-Z_a-z])",
      "name": "storage.modifier.external.ql"
    },
    "false": {
      "match": "\\bfalse(?![0-9A-Z_a-z])",
      "name": "constant.language.boolean.false.ql"
    },
    "final": {
      "match": "\\bfinal(?![0-9A-Z_a-z])",
      "name": "storage.modifier.final.ql"
    },
    "float": {
      "match": "\\bfloat(?![0-9A-Z_a-z])",
      "name": "keyword.type.float.ql"
    },
    "float-literal": {
      "match": "-?[0-9]+\\.[0-9]+(?![0-9])",
      "name": "constant.numeric.decimal.ql"
    },
    "forall": {
      "match": "\\bforall(?![0-9A-Z_a-z])",
      "name": "keyword.quantifier.forall.ql"
    },
    "forex": {
      "match": "\\bforex(?![0-9A-Z_a-z])",
      "name": "keyword.quantifier.forex.ql"
    },
    "from": {
      "match": "\\bfrom(?![0-9A-Z_a-z])",
      "name": "keyword.other.from.ql"
    },
    "from-section": {
      "begin": "\\b(from(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#from"
            }
          ]
        }
      },
      "end": "(?=\\b(?:select(?![0-9A-Z_a-z])|where(?![0-9A-Z_a-z])))",
      "name": "meta.block.from-section.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])(?=\\s*(?:,|\\bwhere(?![0-9A-Z_a-z])|\\bselect(?![0-9A-Z_a-z])|$))",
          "name": "variable.parameter.ql"
        },
        {
          "include": "#module-qualifier"
        },
        {
          "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])|@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.ql"
        },
        {
          "match": "\\b[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "variable.parameter.ql"
        }
      ]
    },
    "id-character": {
      "match": "[0-9A-Z_a-z]"
    },
    "if": {
      "match": "\\bif(?![0-9A-Z_a-z])",
      "name": "keyword.other.if.ql"
    },
    "implements": {
      "match": "\\bimplements(?![0-9A-Z_a-z])",
      "name": "keyword.other.implements.ql"
    },
    "implements-clause": {
      "begin": "\\b(implements(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#implements"
            }
          ]
        }
      },
      "end": "(?=\\{)",
      "name": "meta.block.implements-clause.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])|@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.ql"
        }
      ]
    },
    "implies": {
      "match": "\\bimplies(?![0-9A-Z_a-z])",
      "name": "keyword.other.implies.ql"
    },
    "import": {
      "match": "\\bimport(?![0-9A-Z_a-z])",
      "name": "keyword.other.import.ql"
    },
    "import-as-clause": {
      "begin": "\\b(as(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#as"
            }
          ]
        }
      },
      "end": "(?<=[0-9A-Z_a-z])(?![0-9A-Z_a-z])(?<!(?<![0-9A-Z_a-z])as)|(?=\\s*(?!/[*/]|\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z]))\\S)|(?=\\s*\\b(?:_(?![0-9A-Z_a-z])|and(?![0-9A-Z_a-z])|any(?![0-9A-Z_a-z])|as(?![0-9A-Z_a-z])|asc(?![0-9A-Z_a-z])|avg(?![0-9A-Z_a-z])|boolean(?![0-9A-Z_a-z])|by(?![0-9A-Z_a-z])|class(?![0-9A-Z_a-z])|concat(?![0-9A-Z_a-z])|count(?![0-9A-Z_a-z])|date(?![0-9A-Z_a-z])|desc(?![0-9A-Z_a-z])|else(?![0-9A-Z_a-z])|exists(?![0-9A-Z_a-z])|extends(?![0-9A-Z_a-z])|false(?![0-9A-Z_a-z])|float(?![0-9A-Z_a-z])|forall(?![0-9A-Z_a-z])|forex(?![0-9A-Z_a-z])|from(?![0-9A-Z_a-z])|if(?![0-9A-Z_a-z])|implies(?![0-9A-Z_a-z])|import(?![0-9A-Z_a-z])|in(?![0-9A-Z_a-z])|instanceof(?![0-9A-Z_a-z])|int(?![0-9A-Z_a-z])|max(?![0-9A-Z_a-z])|min(?![0-9A-Z_a-z])|module(?![0-9A-Z_a-z])|newtype(?![0-9A-Z_a-z])|none(?![0-9A-Z_a-z])|not(?![0-9A-Z_a-z])|or(?![0-9A-Z_a-z])|order(?![0-9A-Z_a-z])|predicate(?![0-9A-Z_a-z])|rank(?![0-9A-Z_a-z])|result(?![0-9A-Z_a-z])|select(?![0-9A-Z_a-z])|strictconcat(?![0-9A-Z_a-z])|strictcount(?![0-9A-Z_a-z])|strictsum(?![0-9A-Z_a-z])|string(?![0-9A-Z_a-z])|sum(?![0-9A-Z_a-z])|super(?![0-9A-Z_a-z])|then(?![0-9A-Z_a-z])|this(?![0-9A-Z_a-z])|true(?![0-9A-Z_a-z])|unique(?![0-9A-Z_a-z])|where(?![0-9A-Z_a-z])))",
      "name": "meta.block.import-as-clause.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.namespace.ql"
        }
      ]
    },
    "import-directive": {
      "begin": "\\b(import(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#import"
            }
          ]
        }
      },
      "end": "(?<!\\bimport)(?<=[0-9>A-Z_a-z])(?!\\s*(\\.|::|[,<]))",
      "name": "meta.block.import-directive.ql",
      "patterns": [
        {
          "include": "#instantiation-args"
        },
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.namespace.ql"
        }
      ]
    },
    "in": {
      "match": "\\bin(?![0-9A-Z_a-z])",
      "name": "keyword.other.in.ql"
    },
    "instanceof": {
      "match": "\\binstanceof(?![0-9A-Z_a-z])",
      "name": "keyword.other.instanceof.ql"
    },
    "instantiation-args": {
      "begin": "(<)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-angle"
            }
          ]
        }
      },
      "end": "(>)",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-angle"
            }
          ]
        }
      },
      "name": "meta.type.parameters.ql",
      "patterns": [
        {
          "include": "#instantiation-args"
        },
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.namespace.ql"
        }
      ]
    },
    "int": {
      "match": "\\bint(?![0-9A-Z_a-z])",
      "name": "keyword.type.int.ql"
    },
    "int-literal": {
      "match": "-?[0-9]+(?![0-9])",
      "name": "constant.numeric.decimal.ql"
    },
    "keyword": {
      "patterns": [
        {
          "include": "#dont-care"
        },
        {
          "include": "#and"
        },
        {
          "include": "#any"
        },
        {
          "include": "#as"
        },
        {
          "include": "#asc"
        },
        {
          "include": "#avg"
        },
        {
          "include": "#boolean"
        },
        {
          "include": "#by"
        },
        {
          "include": "#class"
        },
        {
          "include": "#concat"
        },
        {
          "include": "#count"
        },
        {
          "include": "#date"
        },
        {
          "include": "#desc"
        },
        {
          "include": "#else"
        },
        {
          "include": "#exists"
        },
        {
          "include": "#extends"
        },
        {
          "include": "#false"
        },
        {
          "include": "#float"
        },
        {
          "include": "#forall"
        },
        {
          "include": "#forex"
        },
        {
          "include": "#from"
        },
        {
          "include": "#if"
        },
        {
          "include": "#implies"
        },
        {
          "include": "#import"
        },
        {
          "include": "#in"
        },
        {
          "include": "#instanceof"
        },
        {
          "include": "#int"
        },
        {
          "include": "#max"
        },
        {
          "include": "#min"
        },
        {
          "include": "#module"
        },
        {
          "include": "#newtype"
        },
        {
          "include": "#none"
        },
        {
          "include": "#not"
        },
        {
          "include": "#or"
        },
        {
          "include": "#order"
        },
        {
          "include": "#predicate"
        },
        {
          "include": "#rank"
        },
        {
          "include": "#result"
        },
        {
          "include": "#select"
        },
        {
          "include": "#strictconcat"
        },
        {
          "include": "#strictcount"
        },
        {
          "include": "#strictsum"
        },
        {
          "include": "#string"
        },
        {
          "include": "#sum"
        },
        {
          "include": "#super"
        },
        {
          "include": "#then"
        },
        {
          "include": "#this"
        },
        {
          "include": "#true"
        },
        {
          "include": "#unique"
        },
        {
          "include": "#where"
        }
      ]
    },
    "language": {
      "match": "\\blanguage(?![0-9A-Z_a-z])",
      "name": "storage.modifier.language.ql"
    },
    "language-annotation": {
      "begin": "\\b(language(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#language"
            }
          ]
        }
      },
      "end": "(?!(?:\\s|$|/[*/])|\\[)|(?<=])",
      "name": "meta.block.language-annotation.ql",
      "patterns": [
        {
          "include": "#language-annotation-body"
        },
        {
          "include": "#non-context-sensitive"
        }
      ]
    },
    "language-annotation-body": {
      "begin": "(\\[)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-bracket"
            }
          ]
        }
      },
      "end": "(])",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-bracket"
            }
          ]
        }
      },
      "name": "meta.block.language-annotation-body.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\bmonotonicAggregates(?![0-9A-Z_a-z])",
          "name": "storage.modifier.ql"
        }
      ]
    },
    "library": {
      "match": "\\blibrary(?![0-9A-Z_a-z])",
      "name": "storage.modifier.library.ql"
    },
    "literal": {
      "patterns": [
        {
          "include": "#float-literal"
        },
        {
          "include": "#int-literal"
        },
        {
          "include": "#string-literal"
        }
      ]
    },
    "lower-id": {
      "match": "\\b[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])"
    },
    "max": {
      "match": "\\bmax(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.max.ql"
    },
    "min": {
      "match": "\\bmin(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.min.ql"
    },
    "module": {
      "match": "\\bmodule(?![0-9A-Z_a-z])",
      "name": "keyword.other.module.ql"
    },
    "module-body": {
      "begin": "(\\{)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-brace"
            }
          ]
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-brace"
            }
          ]
        }
      },
      "name": "meta.block.module-body.ql",
      "patterns": [
        {
          "include": "#module-member"
        }
      ]
    },
    "module-declaration": {
      "begin": "\\b(module(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#module"
            }
          ]
        }
      },
      "end": "(?<=[;}])",
      "name": "meta.block.module-declaration.ql",
      "patterns": [
        {
          "include": "#module-body"
        },
        {
          "include": "#implements-clause"
        },
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.namespace.ql"
        }
      ]
    },
    "module-member": {
      "patterns": [
        {
          "include": "#import-directive"
        },
        {
          "include": "#import-as-clause"
        },
        {
          "include": "#module-declaration"
        },
        {
          "include": "#newtype-declaration"
        },
        {
          "include": "#newtype-branch-name-with-prefix"
        },
        {
          "include": "#predicate-parameter-list"
        },
        {
          "include": "#predicate-body"
        },
        {
          "include": "#class-declaration"
        },
        {
          "include": "#select-clause"
        },
        {
          "include": "#predicate-or-field-declaration"
        },
        {
          "include": "#non-context-sensitive"
        },
        {
          "include": "#annotation"
        }
      ]
    },
    "module-qualifier": {
      "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])(?=\\s*::)",
      "name": "entity.name.type.namespace.ql"
    },
    "newtype": {
      "match": "\\bnewtype(?![0-9A-Z_a-z])",
      "name": "keyword.other.newtype.ql"
    },
    "newtype-branch-name-with-prefix": {
      "begin": "=|\\bor(?![0-9A-Z_a-z])",
      "beginCaptures": {
        "0": {
          "patterns": [
            {
              "include": "#or"
            },
            {
              "include": "#comparison-operator"
            }
          ]
        }
      },
      "end": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
      "endCaptures": {
        "0": {
          "name": "entity.name.type.ql"
        }
      },
      "name": "meta.block.newtype-branch-name-with-prefix.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        }
      ]
    },
    "newtype-declaration": {
      "begin": "\\b(newtype(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#newtype"
            }
          ]
        }
      },
      "end": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
      "endCaptures": {
        "0": {
          "name": "entity.name.type.ql"
        }
      },
      "name": "meta.block.newtype-declaration.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        }
      ]
    },
    "non-context-sensitive": {
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#literal"
        },
        {
          "include": "#operator-or-punctuation"
        },
        {
          "include": "#keyword"
        }
      ]
    },
    "none": {
      "match": "\\bnone(?![0-9A-Z_a-z])",
      "name": "keyword.quantifier.none.ql"
    },
    "not": {
      "match": "\\bnot(?![0-9A-Z_a-z])",
      "name": "keyword.other.not.ql"
    },
    "open-angle": {
      "match": "<",
      "name": "punctuation.anglebracket.open.ql"
    },
    "open-brace": {
      "match": "\\{",
      "name": "punctuation.curlybrace.open.ql"
    },
    "open-bracket": {
      "match": "\\[",
      "name": "punctuation.squarebracket.open.ql"
    },
    "open-paren": {
      "match": "\\(",
      "name": "punctuation.parenthesis.open.ql"
    },
    "operator-or-punctuation": {
      "patterns": [
        {
          "include": "#relational-operator"
        },
        {
          "include": "#comparison-operator"
        },
        {
          "include": "#arithmetic-operator"
        },
        {
          "include": "#comma"
        },
        {
          "include": "#semicolon"
        },
        {
          "include": "#dot"
        },
        {
          "include": "#dotdot"
        },
        {
          "include": "#pipe"
        },
        {
          "include": "#open-paren"
        },
        {
          "include": "#close-paren"
        },
        {
          "include": "#open-brace"
        },
        {
          "include": "#close-brace"
        },
        {
          "include": "#open-bracket"
        },
        {
          "include": "#close-bracket"
        },
        {
          "include": "#open-angle"
        },
        {
          "include": "#close-angle"
        }
      ]
    },
    "or": {
      "match": "\\bor(?![0-9A-Z_a-z])",
      "name": "keyword.other.or.ql"
    },
    "order": {
      "match": "\\border(?![0-9A-Z_a-z])",
      "name": "keyword.order.order.ql"
    },
    "override": {
      "match": "\\boverride(?![0-9A-Z_a-z])",
      "name": "storage.modifier.override.ql"
    },
    "pipe": {
      "match": "\\|",
      "name": "punctuation.separator.pipe.ql"
    },
    "pragma": {
      "match": "\\bpragma(?![0-9A-Z_a-z])",
      "name": "storage.modifier.pragma.ql"
    },
    "pragma-annotation": {
      "begin": "\\b(pragma(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#pragma"
            }
          ]
        }
      },
      "end": "(?!(?:\\s|$|/[*/])|\\[)|(?<=])",
      "name": "meta.block.pragma-annotation.ql",
      "patterns": [
        {
          "include": "#pragma-annotation-body"
        },
        {
          "include": "#non-context-sensitive"
        }
      ]
    },
    "pragma-annotation-body": {
      "begin": "(\\[)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-bracket"
            }
          ]
        }
      },
      "end": "(])",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-bracket"
            }
          ]
        }
      },
      "name": "meta.block.pragma-annotation-body.ql",
      "patterns": [
        {
          "match": "\\b(?:inline|noinline|nomagic|noopt)\\b",
          "name": "storage.modifier.ql"
        }
      ]
    },
    "predicate": {
      "match": "\\bpredicate(?![0-9A-Z_a-z])",
      "name": "keyword.other.predicate.ql"
    },
    "predicate-body": {
      "begin": "(\\{)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-brace"
            }
          ]
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-brace"
            }
          ]
        }
      },
      "name": "meta.block.predicate-body.ql",
      "patterns": [
        {
          "include": "#predicate-body-contents"
        }
      ]
    },
    "predicate-body-contents": {
      "patterns": [
        {
          "include": "#expr-as-clause"
        },
        {
          "include": "#non-context-sensitive"
        },
        {
          "include": "#module-qualifier"
        },
        {
          "match": "\\b[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])\\s*[*+]?\\s*(?=\\()",
          "name": "entity.name.function.ql"
        },
        {
          "match": "\\b[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "variable.other.ql"
        },
        {
          "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])|@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.ql"
        }
      ]
    },
    "predicate-or-field-declaration": {
      "begin": "(?=\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z]))(?!\\b(?:(?:_(?![0-9A-Z_a-z])|and(?![0-9A-Z_a-z])|any(?![0-9A-Z_a-z])|as(?![0-9A-Z_a-z])|asc(?![0-9A-Z_a-z])|avg(?![0-9A-Z_a-z])|boolean(?![0-9A-Z_a-z])|by(?![0-9A-Z_a-z])|class(?![0-9A-Z_a-z])|concat(?![0-9A-Z_a-z])|count(?![0-9A-Z_a-z])|date(?![0-9A-Z_a-z])|desc(?![0-9A-Z_a-z])|else(?![0-9A-Z_a-z])|exists(?![0-9A-Z_a-z])|extends(?![0-9A-Z_a-z])|false(?![0-9A-Z_a-z])|float(?![0-9A-Z_a-z])|forall(?![0-9A-Z_a-z])|forex(?![0-9A-Z_a-z])|from(?![0-9A-Z_a-z])|if(?![0-9A-Z_a-z])|implies(?![0-9A-Z_a-z])|import(?![0-9A-Z_a-z])|in(?![0-9A-Z_a-z])|instanceof(?![0-9A-Z_a-z])|int(?![0-9A-Z_a-z])|max(?![0-9A-Z_a-z])|min(?![0-9A-Z_a-z])|module(?![0-9A-Z_a-z])|newtype(?![0-9A-Z_a-z])|none(?![0-9A-Z_a-z])|not(?![0-9A-Z_a-z])|or(?![0-9A-Z_a-z])|order(?![0-9A-Z_a-z])|predicate(?![0-9A-Z_a-z])|rank(?![0-9A-Z_a-z])|result(?![0-9A-Z_a-z])|select(?![0-9A-Z_a-z])|strictconcat(?![0-9A-Z_a-z])|strictcount(?![0-9A-Z_a-z])|strictsum(?![0-9A-Z_a-z])|string(?![0-9A-Z_a-z])|sum(?![0-9A-Z_a-z])|super(?![0-9A-Z_a-z])|then(?![0-9A-Z_a-z])|this(?![0-9A-Z_a-z])|true(?![0-9A-Z_a-z])|unique(?![0-9A-Z_a-z])|where(?![0-9A-Z_a-z]))|(?:abstract(?![0-9A-Z_a-z])|additional(?![0-9A-Z_a-z])|bindingset(?![0-9A-Z_a-z])|cached(?![0-9A-Z_a-z])|default(?![0-9A-Z_a-z])|deprecated(?![0-9A-Z_a-z])|external(?![0-9A-Z_a-z])|final(?![0-9A-Z_a-z])|language(?![0-9A-Z_a-z])|library(?![0-9A-Z_a-z])|override(?![0-9A-Z_a-z])|pragma(?![0-9A-Z_a-z])|private(?![0-9A-Z_a-z])|query(?![0-9A-Z_a-z])|signature(?![0-9A-Z_a-z])|transient(?![0-9A-Z_a-z]))))|(?=\\b(?:boolean(?![0-9A-Z_a-z])|date(?![0-9A-Z_a-z])|float(?![0-9A-Z_a-z])|int(?![0-9A-Z_a-z])|predicate(?![0-9A-Z_a-z])|string(?![0-9A-Z_a-z])))|(?=@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z]))",
      "end": "(?<=[;}])",
      "name": "meta.block.predicate-or-field-declaration.ql",
      "patterns": [
        {
          "include": "#predicate-parameter-list"
        },
        {
          "include": "#predicate-body"
        },
        {
          "include": "#non-context-sensitive"
        },
        {
          "include": "#module-qualifier"
        },
        {
          "match": "\\b[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])(?=\\s*;)",
          "name": "variable.field.ql"
        },
        {
          "match": "\\b[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.function.ql"
        },
        {
          "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])|@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.ql"
        }
      ]
    },
    "predicate-parameter-list": {
      "begin": "(\\()",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#open-paren"
            }
          ]
        }
      },
      "end": "(\\))",
      "endCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#close-paren"
            }
          ]
        }
      },
      "name": "meta.block.predicate-parameter-list.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])(?=\\s*[),])",
          "name": "variable.parameter.ql"
        },
        {
          "include": "#module-qualifier"
        },
        {
          "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])|@[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "entity.name.type.ql"
        },
        {
          "match": "\\b[a-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "variable.parameter.ql"
        }
      ]
    },
    "predicate-start-keyword": {
      "patterns": [
        {
          "include": "#boolean"
        },
        {
          "include": "#date"
        },
        {
          "include": "#float"
        },
        {
          "include": "#int"
        },
        {
          "include": "#predicate"
        },
        {
          "include": "#string"
        }
      ]
    },
    "private": {
      "match": "\\bprivate(?![0-9A-Z_a-z])",
      "name": "storage.modifier.private.ql"
    },
    "query": {
      "match": "\\bquery(?![0-9A-Z_a-z])",
      "name": "storage.modifier.query.ql"
    },
    "rank": {
      "match": "\\brank(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.rank.ql"
    },
    "relational-operator": {
      "match": "<=|<|>=|>",
      "name": "keyword.operator.relational.ql"
    },
    "result": {
      "match": "\\bresult(?![0-9A-Z_a-z])",
      "name": "variable.language.result.ql"
    },
    "select": {
      "match": "\\bselect(?![0-9A-Z_a-z])",
      "name": "keyword.query.select.ql"
    },
    "select-as-clause": {
      "begin": "\\b(as(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#as"
            }
          ]
        }
      },
      "end": "(?<=[0-9A-Z_a-z])(?![0-9A-Z_a-z])",
      "match": "meta.block.select-as-clause.ql",
      "patterns": [
        {
          "include": "#non-context-sensitive"
        },
        {
          "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])",
          "name": "variable.other.ql"
        }
      ]
    },
    "select-clause": {
      "begin": "(?=\\b(?:from(?![0-9A-Z_a-z])|where(?![0-9A-Z_a-z])|select(?![0-9A-Z_a-z])))",
      "end": "(?!\\b(?:from(?![0-9A-Z_a-z])|where(?![0-9A-Z_a-z])|select(?![0-9A-Z_a-z])))",
      "name": "meta.block.select-clause.ql",
      "patterns": [
        {
          "include": "#from-section"
        },
        {
          "include": "#where-section"
        },
        {
          "include": "#select-section"
        }
      ]
    },
    "select-section": {
      "begin": "\\b(select(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#select"
            }
          ]
        }
      },
      "end": "(?=\\n)",
      "name": "meta.block.select-section.ql",
      "patterns": [
        {
          "include": "#predicate-body-contents"
        },
        {
          "include": "#select-as-clause"
        }
      ]
    },
    "semicolon": {
      "match": ";",
      "name": "punctuation.separator.statement.ql"
    },
    "signature": {
      "match": "\\bsignature(?![0-9A-Z_a-z])",
      "name": "storage.modifier.signature.ql"
    },
    "simple-id": {
      "match": "\\b[A-Za-z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])"
    },
    "strictconcat": {
      "match": "\\bstrictconcat(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.strictconcat.ql"
    },
    "strictcount": {
      "match": "\\bstrictcount(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.strictcount.ql"
    },
    "strictsum": {
      "match": "\\bstrictsum(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.strictsum.ql"
    },
    "string": {
      "match": "\\bstring(?![0-9A-Z_a-z])",
      "name": "keyword.type.string.ql"
    },
    "string-escape": {
      "match": "\\\\[\"\\\\nrt]",
      "name": "constant.character.escape.ql"
    },
    "string-literal": {
      "begin": "\"",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.ql"
        }
      },
      "end": "(\")|([^\\n\\\\])$",
      "endCaptures": {
        "1": {
          "name": "punctuation.definition.string.end.ql"
        },
        "2": {
          "name": "invalid.illegal.newline.ql"
        }
      },
      "name": "string.quoted.double.ql",
      "patterns": [
        {
          "include": "#string-escape"
        }
      ]
    },
    "sum": {
      "match": "\\bsum(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.sum.ql"
    },
    "super": {
      "match": "\\bsuper(?![0-9A-Z_a-z])",
      "name": "variable.language.super.ql"
    },
    "then": {
      "match": "\\bthen(?![0-9A-Z_a-z])",
      "name": "keyword.other.then.ql"
    },
    "this": {
      "match": "\\bthis(?![0-9A-Z_a-z])",
      "name": "variable.language.this.ql"
    },
    "transient": {
      "match": "\\btransient(?![0-9A-Z_a-z])",
      "name": "storage.modifier.transient.ql"
    },
    "true": {
      "match": "\\btrue(?![0-9A-Z_a-z])",
      "name": "constant.language.boolean.true.ql"
    },
    "unique": {
      "match": "\\bunique(?![0-9A-Z_a-z])",
      "name": "keyword.aggregate.unique.ql"
    },
    "upper-id": {
      "match": "\\b[A-Z][0-9A-Z_a-z]*(?![0-9A-Z_a-z])"
    },
    "where": {
      "match": "\\bwhere(?![0-9A-Z_a-z])",
      "name": "keyword.query.where.ql"
    },
    "where-section": {
      "begin": "\\b(where(?![0-9A-Z_a-z]))",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#where"
            }
          ]
        }
      },
      "end": "(?=\\bselect(?![0-9A-Z_a-z]))",
      "name": "meta.block.where-section.ql",
      "patterns": [
        {
          "include": "#predicate-body-contents"
        }
      ]
    },
    "whitespace-or-comment-start": {
      "match": "\\s|$|/[*/]"
    }
  },
  "scopeName": "source.ql"
}
