{ "fileTypes": [ "m", "moo" ], "name": "Mercury", "patterns": [ { "include": "#number" }, { "include": "#string_quoted_double" }, { "include": "#inline_bin_op" }, { "include": "#atom" }, { "include": "#block_comment" }, { "include": "#line_comment" }, { "include": "#decl_keywords" }, { "include": "#purity_level" }, { "include": "#declarations" }, { "include": "#common_ops" }, { "include": "#determ_keywords" }, { "include": "#logic_keywords" }, { "include": "#foreign_mods" }, { "include": "#variables" } ], "repository": { "atom": { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.source.mercury" } }, "end": "'(?!['])", "endCaptures": { "0": { "name": "punctuation.definition.string.end.source.mercury" } }, "name": "string.quoted.single.source.mercury", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.source.mercury" }, { "match": "\\'\\'", "name": "constant.character.escape.quote.source.mercury" } ] }, "block_comment": { "begin": "/\\*", "captures": { "0": { "name": "punctuation.definition.comment.source.mercury" } }, "end": "\\*/", "name": "comment.block.source.mercury" }, "common_ops": { "patterns": [ { "match": "(-(?![>-])|[+](?![+])|[*][*]?|/(?![\\\\/])|//|\\\\(?![/=]))", "name": "keyword.operator.arithmetic.source.mercury" }, { "match": "(=<|>=|<(?![=])|(?![-])>)", "name": "keyword.operator.comparison.source.mercury" }, { "match": "(<=>|<=|=>|\\\\=|==|:-|=(?![=<>])|,|;|->|/\\\\(?![=])|\\\\/|@)", "name": "keyword.operator.logic.source.mercury" }, { "match": "(-->|--->|[+][+](?![+])|::|:=|![\\.:]?|\\||\\^)", "name": "keyword.operator.other.source.mercury" }, { "match": "(\\(|\\)|\\[|\\]|\\{|\\})", "name": "keyword.operator.list.source.mercury" }, { "match": "\\.(?=[ \\t]*($|%))", "name": "keyword.operator.terminator.source.mercury" } ] }, "decl_keywords": { "match": "\\b(is|where)\\b", "name": "keyword.control.declaration.source.mercury" }, "declarations": { "patterns": [ { "captures": { "1": { "name": "keyword.operator.logic.source.mercury" } }, "match": "(?x)(^[ \\t]*:-)[ ]((use|include|end|import|)_module|module |func|pred|type(class)?|inst(ance)? |mode|interface|implementation )\\b", "name": "keyword.control.declaration.source.mercury" }, { "captures": { "1": { "name": "keyword.operator.logic.source.mercury" }, "2": { "name": "keyword.control.pragma.source.mercury" } }, "match": "(?x)(^[ \\t]*:-)[ ](pragma)[ ](check_termination|does_not_terminate|fact_table |inline|loop_check|memo|minimal_model|no_inline |obsolete|promise_equivalent_clauses|source_file |terminates|type_spec |foreign_(proc|type|decl|code|export(_enum)? |enum|import_module) )\\b", "name": "constant.language.pragma.source.mercury" } ] }, "determ_keywords": { "match": "(?x)\\b(require_(_switch_arms)?)?(multi|cc_(multi|nondet) |det|semidet|nondet |errorneous|failure )\\b", "name": "constant.language.determ.source.mercury" }, "foreign_mods": { "match": "(?x)\\b(affects_liveness|(does_not|doesnt)_affect_liveness |attach_to_io_state |can_pass_as_mercury_type|stable |(may_call|will_not)(_call_mercury|_modify) |(may_)(not_)?_duplicate |(no_|unknown_)?sharing|tabled_for_io|local |(un)?trailed |(not_|maybe_)?thread_safe |will_not_throw_exception )\\b", "name": "storage.type.source.mercury" }, "impl_defined_variable": { "match": "[$][a-zA-Z0-9_]*\\b", "name": "variable.language.source.mercury" }, "inline_bin_op": { "match": "`[^`]+`", "name": "keyword.operator.other.source.mercury" }, "line_comment": { "begin": "(^[ \\t]+)?(%([-]+%)?)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.source.mercury" }, "2": { "name": "comment.line.percentage.source.mercury" } }, "end": "(?!\\G)", "name": "comment.comment.source.mercury", "patterns": [ { "captures": { "0": { "name": "comment.comment.source.mercury" }, "1": { "name": "constant.language.warn.source.mercury" } }, "match": "(([ \\t]+(XXX|TODO|FIXME|WARNING|IMPORTANT|NOTE(_TO_IMPLEMENTORS)?)\\b)*)(.*)" } ] }, "logic_keywords": { "match": "(?x)\\b(yes|no|true|false|(semidet_)?succeed|(semidet_)?fail |some|all|require_complete_switch )\\b", "name": "constant.language.logic.source.mercury" }, "number": { "match": "\\b(0(?!['])[0-7]*|0['].|[1-9][0-9]*|\\.[0-9]+([eE][0-9]+)?|0[xX][0-9a-fA-F]+|0[bB][01]+)\\b", "name": "constant.numeric.source.mercury" }, "purity_level": { "match": "\\b((promise_)(semi)?pure|(im|semi)?pure)\\b", "name": "storage.type.source.mercury" }, "singleton_variable": { "match": "\\b_[A-Z]?[a-zA-Z0-9_]*\\b", "name": "support.variable" }, "string_quoted_double": { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.literal.string.begin.source.mercury" } }, "end": "\"(?!\")", "endCaptures": { "0": { "name": "punctuation.literal.string.end.source.mercury" } }, "name": "string.quoted.double.source.mercury", "patterns": [ { "match": "\\\\.", "name": "constant.character.escapesource.mercury" }, { "match": "\"\"", "name": "constant.character.escape.quote.source.mercury" }, { "match": "%[I]?[-+# *\\.0-9]*[dioxXucsfeEgGp]", "name": "constant.character.escape.format.source.mercury" } ] }, "variable": { "match": "\\b[A-Z][a-zA-Z0-9_]*\\b", "name": "variable.other" }, "variables": { "patterns": [ { "include": "#impl_defined_variable" }, { "include": "#singleton_variable" }, { "include": "#variable" } ] } }, "scopeName": "source.mercury", "uuid": "A3E186F8-CF20-4983-B132-209EDF43E3DE" }