{"name":"Earthfile","scopeName":"source.earthfile","patterns":[{"include":"#comment"},{"include":"#constant"},{"include":"#entity"},{"include":"#keyword"},{"include":"#string"},{"include":"#variable"},{"include":"#target"},{"include":"#user-command"}],"repository":{"comment":{"patterns":[{"match":"^(\\s*)((#).*$\\n?)","captures":{"1":{"name":"punctuation.whitespace.comment.leading.earthfile"},"2":{"name":"comment.line.number-sign.earthfile"},"3":{"name":"punctuation.definition.comment.earthfile"}}},{"name":"comment.line.earthfile","match":"(\\s+)((#).*$\\n?)"},{"match":"([\\\\\\s]+)((#).*$\\n?)","captures":{"2":{"name":"comment.line.number-sign.earthfile"}}}]},"constant":{"patterns":[{"name":"constant.character.escape.earthfile","match":"\\\\."},{"name":"constant.character.escape.earthfile","match":"\\\\$"},{"name":"constant.numeric.earthfile","match":"(?\u003c=EXPOSE\\s)(\\d+)"}]},"entity":{"patterns":[{"name":"entity.name.variable.artifact.earthfile","match":"([a-zA-Z0-9._\\-/:]*\\+[a-z][a-zA-Z0-9.\\-]*(/\\S*)+)"},{"name":"entity.name.type.target.earthfile","match":"([a-zA-Z0-9._\\-/:]*\\+[a-z][a-zA-Z0-9.\\-]*)"},{"name":"entity.name.function.user-command.earthfile","match":"([a-zA-Z0-9._\\-/:]*\\+[A-Z][a-zA-Z0-9._]*)"}]},"keyword":{"patterns":[{"name":"keyword.operator.shell.earthfile","match":"((\u0026\u0026)|(\u003e\u003e)|(\u003c\u003c)|[|;\u003e])"},{"name":"keyword.operator.assignment.earthfile","match":"([=])"},{"name":"keyword.operator.flag.earthfile","match":"(\\B(-)+[a-zA-Z0-9\\-_]+)"},{"include":"#special-method"},{"include":"#target"},{"include":"#user-command"}]},"special-method":{"patterns":[{"match":"^\\s*\\b(SAVE ARTIFACT)(\\b.*?\\b)(AS LOCAL)\\b","captures":{"1":{"name":"keyword.other.special-method.earthfile"},"2":{"name":"entity.name.variable.target.earthfile"},"3":{"name":"keyword.other.special-method.earthfile"}}},{"match":"^\\s*\\b(FOR)\\b.*?\\b(IN)\\b","captures":{"1":{"name":"keyword.other.special-method.earthfile"},"2":{"name":"keyword.other.special-method.earthfile"}}},{"match":"^\\s*(FROM)\\s*([^\\s#]+)","captures":{"1":{"name":"keyword.other.special-method.earthfile"},"2":{"name":"entity.name.type.base-image.earthfile"}}},{"match":"^\\s*(FROM|COPY|SAVE ARTIFACT|SAVE IMAGE|RUN|LABEL|EXPOSE|VOLUME|USER|ENV|ARG|BUILD|WORKDIR|ENTRYPOINT|CMD|GIT CLONE|DOCKER LOAD|DOCKER PULL|HEALTHCHECK|WITH DOCKER|END|IF|ELSE|ELSE IF|DO|COMMAND|IMPORT|LOCALLY|FOR|VERSION|WAIT|TRY|FINALLY|CACHE|HOST|PIPELINE|TRIGGER|PROJECT|SET|LET|ADD|STOP SIGNAL|ONBUILD|SHELL)\\s((--\\w+(?:-\\w+)*\\s*)+)","captures":{"1":{"name":"keyword.other.special-method.earthfile"},"2":{"name":"entity.name.type.tag.earthfile"}}},{"name":"keyword.other.special-method.earthfile","match":"^\\s*HEALTHCHECK\\s+(NONE|CMD)\\s"},{"name":"keyword.other.special-method.earthfile","match":"^\\s*FROM DOCKERFILE\\s"},{"name":"keyword.other.special-method.earthfile","match":"^\\s*(FROM|COPY|SAVE ARTIFACT|SAVE IMAGE|RUN|LABEL|EXPOSE|VOLUME|USER|ENV|ARG|BUILD|WORKDIR|ENTRYPOINT|CMD|GIT CLONE|DOCKER LOAD|DOCKER PULL|HEALTHCHECK|WITH DOCKER|END|IF|ELSE|ELSE IF|DO|COMMAND|IMPORT|LOCALLY|FOR|VERSION|WAIT|TRY|FINALLY|CACHE|HOST|PIPELINE|TRIGGER|PROJECT|SET|LET|ADD|STOP SIGNAL|ONBUILD|SHELL)\\s"}]},"string":{"patterns":[{"name":"string.quoted.double.earthfile","begin":"\"","end":"\"","patterns":[{"name":"constant.character.escaped.earthfile","match":"\\\\."}],"beginCaptures":{"1":{"name":"punctuation.definition.string.begin.earthfile"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.earthfile"}}},{"name":"string.quoted.single.earthfile","begin":"'","end":"'","patterns":[{"name":"constant.character.escaped.earthfile","match":"\\\\."}],"beginCaptures":{"1":{"name":"punctuation.definition.string.begin.earthfile"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.earthfile"}}}]},"target":{"patterns":[{"match":"^\\s*([a-z]([a-zA-Z0-9.]|-)*):","captures":{"1":{"name":"entity.name.class.target.earthfile"}}}]},"user-command":{"patterns":[{"match":"^\\s*([A-Z][a-zA-Z0-9._]*):","captures":{"1":{"name":"entity.name.function.user-command.earthfile"}}}]},"variable":{"patterns":[{"name":"variable.other.earthfile","match":"\\$[a-zA-Z0-9_]+"},{"name":"variable.other.earthfile","match":"(?\u003c=\\${)([a-zA-Z0-9.\\-_]+)(?=})"},{"match":"(\\${)([a-zA-Z0-9.\\-_#]+)(})","captures":{"1":{"name":"punctuation.definition.variable.begin.earthfile"},"2":{"name":"variable.other.earthfile"},"3":{"name":"punctuation.definition.variable.end.earthfile"}}}]}}}
