{ "scopeName": "source.makefile", "name": "Makefile", "fileTypes": [ "Makefile", "makefile", "BSDmakefile", "GNUmakefile", "OCamlMakefile", "Kbuild", "am", "mak", "make", "mf", "mk", "mkfile", "Makefile.in", "imk", "Makefile.cmake", "Makefile2" ], "firstLineMatch": "^#!\\s*/.*\\bmake\\s+-f", "patterns": [ { "include": "#comment" }, { "include": "#variable-assignment" }, { "include": "#variables" }, { "include": "#recipe" }, { "include": "#directives" } ], "repository": { "comment": { "begin": "(^[ \\t]+)?(?=#)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.makefile" } }, "end": "(?!\\G)", "patterns": [ { "begin": "#", "beginCaptures": { "0": { "name": "punctuation.definition.comment.makefile" } }, "end": "(?=\\n)", "name": "comment.line.number-sign.makefile", "patterns": [ { "match": "\\\\\\n", "name": "constant.character.escape.continuation.makefile" } ] } ] }, "directives": { "patterns": [ { "begin": "^[ ]*([s\\-]?include)\\b", "beginCaptures": { "1": { "name": "keyword.control.include.makefile" } }, "end": "^", "patterns": [ { "include": "#comment" }, { "include": "#variables" }, { "match": "%", "name": "constant.other.placeholder.makefile" } ] }, { "begin": "^[ ]*(vpath)\\b", "beginCaptures": { "1": { "name": "keyword.control.vpath.makefile" } }, "end": "^", "patterns": [ { "include": "#comment" }, { "include": "#variables" }, { "match": "%", "name": "constant.other.placeholder.makefile" } ] }, { "begin": "^(?:(override)\\s*)?(define)\\s*([^\\s]+)\\s*(=|\\?=|:=|\\+=)?(?=\\s)", "captures": { "1": { "name": "keyword.control.override.makefile" }, "2": { "name": "keyword.control.define.makefile" }, "3": { "name": "variable.other.makefile" }, "4": { "name": "punctuation.separator.key-value.makefile" } }, "end": "^(endef)\\b", "name": "meta.scope.conditional.makefile", "patterns": [ { "begin": "\\G(?!\\n)", "end": "^", "patterns": [ { "include": "#comment" } ] }, { "include": "#variables" }, { "include": "#comment" } ] }, { "begin": "^[ ]*(export)\\b", "beginCaptures": { "1": { "name": "keyword.control.$1.makefile" } }, "end": "^", "patterns": [ { "include": "#comment" }, { "include": "#variable-assignment" }, { "match": "[^\\s]+", "name": "variable.other.makefile" } ] }, { "begin": "^[ ]*(override|private)\\b", "beginCaptures": { "1": { "name": "keyword.control.$1.makefile" } }, "end": "^", "patterns": [ { "include": "#comment" }, { "include": "#variable-assignment" } ] }, { "begin": "^[ ]*(unexport|undefine)\\b", "beginCaptures": { "1": { "name": "keyword.control.$1.makefile" } }, "end": "^", "patterns": [ { "include": "#comment" }, { "match": "[^\\s]+", "name": "variable.other.makefile" } ] }, { "begin": "^(ifdef|ifndef)\\s*([^\\s]+)(?=\\s)", "captures": { "1": { "name": "keyword.control.$1.makefile" }, "2": { "name": "variable.other.makefile" }, "3": { "name": "punctuation.separator.key-value.makefile" } }, "end": "^(endif)\\b", "name": "meta.scope.conditional.makefile", "patterns": [ { "begin": "\\G(?!\\n)", "end": "^", "patterns": [ { "include": "#comment" } ] }, { "include": "$self" } ] }, { "begin": "^(ifeq|ifneq)(?=\\s)", "captures": { "1": { "name": "keyword.control.$1.makefile" } }, "end": "^(endif)\\b", "name": "meta.scope.conditional.makefile", "patterns": [ { "begin": "\\G", "end": "^", "name": "meta.scope.condition.makefile", "patterns": [ { "include": "#variables" }, { "include": "#comment" } ] }, { "begin": "^else(?=\\s)", "beginCaptures": { "0": { "name": "keyword.control.else.makefile" } }, "end": "^" }, { "include": "$self" } ] } ] }, "interpolation": { "begin": "(?=`)", "end": "(?!\\G)", "name": "meta.embedded.line.shell", "patterns": [ { "begin": "`", "beginCaptures": { "0": { "name": "punctuation.definition.string.makefile" } }, "contentName": "source.shell", "end": "(`)", "endCaptures": { "0": { "name": "punctuation.definition.string.makefile" }, "1": { "name": "source.shell" } }, "name": "string.interpolated.backtick.makefile", "patterns": [ { "include": "source.shell" } ] } ] }, "recipe": { "begin": "^(?!\\t)([^:]*)(:)(?!\\=)", "beginCaptures": { "1": { "patterns": [ { "captures": { "1": { "name": "support.function.target.$1.makefile" } }, "match": "^\\s*(\\.(PHONY|SUFFIXES|DEFAULT|PRECIOUS|INTERMEDIATE|SECONDARY|SECONDEXPANSION|DELETE_ON_ERROR|IGNORE|LOW_RESOLUTION_TIME|SILENT|EXPORT_ALL_VARIABLES|NOTPARALLEL|ONESHELL|POSIX))\\s*$" }, { "begin": "(?=\\S)", "end": "(?=\\s|$)", "name": "entity.name.function.target.makefile", "patterns": [ { "include": "#variables" }, { "match": "%", "name": "constant.other.placeholder.makefile" } ] } ] }, "2": { "name": "punctuation.separator.key-value.makefile" } }, "end": "^(?!\\t)", "name": "meta.scope.target.makefile", "patterns": [ { "begin": "\\G", "end": "\\n", "name": "meta.scope.prerequisites.makefile", "patterns": [ { "match": "\\\\\\n", "name": "constant.character.escape.continuation.makefile" }, { "match": "%|\\*", "name": "constant.other.placeholder.makefile" }, { "include": "#comment" }, { "include": "#variables" } ] }, { "begin": "^\\t", "end": "$", "name": "meta.scope.recipe.makefile", "patterns": [ { "match": "\\\\\\n", "name": "constant.character.escape.continuation.makefile" }, { "include": "#variables" }, { "include": "source.shell" } ] } ] }, "variable-assignment": { "begin": "(^[ ]*|\\G\\s*)([^\\s:#=]+)\\s*(=|\\?=|:=|\\+=)", "beginCaptures": { "2": { "name": "variable.other.makefile" }, "3": { "name": "keyword.operator.assignment.makefile" } }, "end": "\\n", "patterns": [ { "match": "\\\\\\n", "name": "constant.character.escape.continuation.makefile" }, { "include": "#comment" }, { "include": "#variables" }, { "include": "#interpolation" } ] }, "variables": { "patterns": [ { "captures": { "1": { "name": "punctuation.definition.variable.makefile" } }, "match": "(\\$?\\$)[@%