// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mit`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.just'], names: ['just', 'justfile'], patterns: [ {include: '#comments'}, {include: '#import'}, {include: '#module'}, {include: '#alias'}, {include: '#assignment'}, {include: '#builtins'}, {include: '#keywords'}, {include: '#expression-operators'}, {include: '#backtick'}, {include: '#strings'}, {include: '#parenthesis'}, {include: '#recipes'}, {include: '#recipe-operators'}, {include: '#embedded-languages'}, {include: '#escaping'} ], repository: { alias: { captures: { 1: {name: 'keyword.other.reserved.just'}, 2: {name: 'variable.name.alias.just'}, 3: {name: 'keyword.operator.assignment.just'}, 4: {name: 'variable.other.just'} }, match: '(?x)\n ^\n (alias) \\s+ \n ([a-zA-Z_][a-zA-Z0-9_-]*) \\s* \n (:=) \\s* \n ([a-zA-Z_][a-zA-Z0-9_-]*)\n' }, assignment: { patterns: [ {include: '#variable-assignment'}, {include: '#setting-assignment'} ] }, backtick: { patterns: [ { begin: '(```)', beginCaptures: {1: {name: 'string.interpolated.just'}}, contentName: 'source.shell', end: '(```)', endCaptures: {1: {name: 'string.interpolated.just'}}, patterns: [{include: 'source.shell'}] }, { captures: { 1: {name: 'string.interpolated.just'}, 2: {name: 'source.shell', patterns: [{include: 'source.shell'}]}, 3: {name: 'string.interpolated.just'} }, match: '(`)([^`]*)(`)' } ] }, boolean: { patterns: [ {match: '\\b(true|false)\\b', name: 'constant.language.boolean.just'} ] }, 'builtin-functions': { patterns: [ { match: '(?x) \\b(\n arch|num_cpus|os|os_family|shell|env_var|env_var_or_default|env|\n is_dependency|invocation_directory|invocation_dir|invocation_directory_native|\n invocation_dir_native|justfile|justfile_directory|justfile_dir|just_executable|\n just_pid|source_file|source_directory|source_dir|module_file|module_directory|\n module_dir|append|prepend|encode_uri_component|quote|replace|replace_regex|\n trim|trim_end|trim_end_match|trim_end_matches|trim_start|trim_start_match|\n trim_start_matches|capitalize|kebabcase|lowercamelcase|lowercase|\n shoutykebabcase|shoutysnakecase|snakecase|titlecase|uppercamelcase|\n uppercase|absolute_path|blake3|blake3_file|canonicalize|extension|\n file_name|file_stem|parent_directory|parent_dir|without_extension|clean|join|\n path_exists|error|assert|sha256|sha256_file|uuid|choose|datetime|\n datetime_utc|semver_matches|style|cache_directory|cache_dir|config_directory|config_dir|\n config_local_directory|config_local_dir|data_directory|data_dir|data_local_directory|\n data_local_dir|executable_directory|executable_dir|home_directory|home_dir|which|require|read\n)\\b\n', name: 'support.function.builtin.just' } ] }, builtins: { patterns: [ { match: '(?x) \\b(\n HEX|HEXLOWER|HEXUPPER|PATH_SEP|PATH_VAR_SEP|CLEAR|NORMAL|BOLD|ITALIC|UNDERLINE|INVERT|HIDE|\n STRIKETHROUGH|BLACK|RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|WHITE|BG_BLACK|\n BG_RED|BG_GREEN|BG_YELLOW|BG_BLUE|BG_MAGENTA|BG_CYAN|BG_WHITE\n)\\b\n', name: 'constant.language.const.just' }, {include: '#builtin-functions'}, {include: '#literal'} ] }, comments: { patterns: [{match: '#(?!\\!).*$', name: 'comment.line.number-sign.just'}] }, 'control-keywords': { patterns: [ {match: '\\b(if|else)\\b', name: 'keyword.control.conditional.just'} ] }, 'embedded-languages': { patterns: [ { begin: '^\\s+(#!/usr/bin/env\\s+node.*)$', beginCaptures: {1: {name: 'comment.line.number-sign.shebang.just'}}, contentName: 'source.js', patterns: [{include: 'source.js'}] }, { begin: '^\\s+(#!/usr/bin/env\\s+perl.*)$', beginCaptures: {1: {name: 'comment.line.number-sign.shebang.just'}}, contentName: 'source.perl', patterns: [{include: 'source.perl'}] }, { begin: '^\\s+(#!/usr/bin/env\\s+python.*)$', beginCaptures: {1: {name: 'comment.line.number-sign.shebang.just'}}, contentName: 'source.python', patterns: [{include: 'source.python'}] }, { begin: '^\\s+(#!/usr/bin/env\\s+ruby.*)$', beginCaptures: {1: {name: 'comment.line.number-sign.shebang.just'}}, contentName: 'source.ruby', patterns: [{include: 'source.ruby'}] }, { begin: '^\\s+(#!/usr/bin/env\\s+(?:sh|bash|zsh|fish).*)$', beginCaptures: {1: {name: 'comment.line.number-sign.shebang.just'}}, contentName: 'source.shell', patterns: [{include: 'source.shell'}] } ] }, escaping: { patterns: [ { captures: { 1: {name: 'string.interpolated.escape.just'}, 2: {patterns: [{include: '#expression'}]}, 3: {name: 'string.interpolated.escape.just'} }, match: '(?x)\n (?