{ "scopeName": "source.ninja", "name": "Ninja", "fileTypes": [ "ninja" ], "firstLineMatch": "(?xi)\n# Emacs modeline\n-\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)\n ninja\n(?=[\\s;]|(?]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=\n ninja\n(?=\\s|:|$)", "foldingStartMarker": "^rule", "foldingStopMarker": "^\\S", "patterns": [ { "name": "comment.line.number-sign.ninja", "begin": "#", "end": "$", "beginCaptures": { "0": { "name": "punctuation.definition.comment.ninja" } } }, { "name": "meta.$1.ninja", "begin": "^(rule|pool)\\s+(\\S+)", "end": "^(?=\\S)", "beginCaptures": { "1": { "name": "storage.type.$1.ninja" }, "2": { "name": "entity.name.function.$1.ninja", "patterns": [ { "include": "#escapes" } ] } }, "patterns": [ { "include": "$self" } ] }, { "name": "meta.build.ninja", "begin": "(?x)\n^ (build) \\s+\n((?:[^\\s:|$]|\\$.)+)\n(?:\n (\\|{1,2})\n ((?:[^:$]|\\$.)*)\n (?=:)\n)?", "beginCaptures": { "1": { "name": "storage.type.build.ninja" }, "2": { "name": "entity.name.function.build.ninja", "patterns": [ { "include": "#escapes" } ] }, "3": { "name": "keyword.operator.build.ninja" }, "4": { "patterns": [ { "include": "#escapes" }, { "match": "(?:[^\\s:|$]|\\$.)+", "name": "variable.reference.ninja", "captures": { "0": { "patterns": [ { "include": "#escapes" } ] } } } ] } }, "end": "(?