123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- 'use strict';
- import IRichLanguageConfiguration = monaco.languages.LanguageConfiguration;
- import ILanguage = monaco.languages.IMonarchLanguage;
- export const conf: IRichLanguageConfiguration = {
- comments: {
- lineComment: ';;',
- blockComment: ['(comment', ')'],
- },
- brackets: [['(', ')'], ['{', '}'], ['[', ']']],
- autoClosingPairs: [
- { open: '{', close: '}' },
- { open: '[', close: ']' },
- { open: '(', close: ')' },
- { open: '"', close: '"' },
- ],
- surroundingPairs: [
- { open: '{', close: '}' },
- { open: '[', close: ']' },
- { open: '(', close: ')' },
- { open: '"', close: '"' },
- ],
- };
- export const language = <ILanguage>{
- defaultToken: '',
- ignoreCase: true,
- tokenPostfix: '.clj',
- brackets: [
- { open: '(', close: ')', token: 'delimiter.parenthesis' },
- { open: '{', close: '}', token: 'delimiter.curly' },
- { open: '[', close: ']', token: 'delimiter.square' },
- ],
- keywords: [
- 'ns',
- 'ns-unmap',
- 'create-ns',
- 'in-ns',
- 'fn',
- 'def',
- 'defn',
- 'defmacro',
- 'defmulti',
- 'defonce',
- 'require',
- 'import',
- 'new',
- 'refer',
- 'pos',
- 'pos?',
- 'filter',
- 'map',
- 'reduce',
- 'repeat',
- 'key',
- 'rest',
- 'concat',
- 'into',
- 'reverse',
- 'iterate',
- 'range',
- 'drop',
- 'drop-while',
- 'take',
- 'take-while',
- 'neg',
- 'neg?',
- 'bound-fn',
- 'if',
- 'if-not',
- 'if-let',
- 'case,',
- 'contains',
- 'conj',
- 'disj',
- 'sort',
- 'get',
- 'assoc',
- 'merge',
- 'keys',
- 'vals',
- 'nth',
- 'first',
- 'last',
- 'count',
- 'contains?',
- 'cond',
- 'condp',
- 'cond->',
- 'cond->>',
- 'when',
- 'while',
- 'when-not',
- 'when-let',
- 'when-first',
- 'do',
- 'future',
- 'comment',
- 'doto',
- 'locking',
- 'proxy',
- 'println',
- 'type',
- 'meta',
- 'var',
- 'as->',
- 'reify',
- 'deftype',
- 'defrecord',
- 'defprotocol',
- 'extend',
- 'extend-protocol',
- 'extend-type',
- 'specify',
- 'specify!',
- 'try',
- 'catch',
- 'finally',
- 'let',
- 'letfn',
- 'binding',
- 'loop',
- 'for',
- 'seq',
- 'doseq',
- 'dotimes',
- 'when-let',
- 'if-let',
- 'when-some',
- 'if-some',
- 'this-as',
- 'defmethod',
- 'testing',
- 'deftest',
- 'are',
- 'use-fixtures',
- 'use',
- 'remove',
- 'run',
- 'run*',
- 'fresh',
- 'alt!',
- 'alt!!',
- 'go',
- 'go-loop',
- 'thread',
- 'boolean',
- 'str',
- ],
- constants: ['true', 'false', 'nil'],
- operators: [
- '=',
- 'not=',
- '<',
- '<=',
- '>',
- '>=',
- 'and',
- 'or',
- 'not',
- 'inc',
- 'dec',
- 'max',
- 'min',
- 'rem',
- 'bit-and',
- 'bit-or',
- 'bit-xor',
- 'bit-not',
- ],
- tokenizer: {
- root: [
- [/0[xX][0-9a-fA-F]+/, 'number.hex'],
- [/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?/, 'number.float'],
- [
- /(?:\b(?:(ns|def|defn|defn-|defmacro|defmulti|defonce|ns|ns-unmap|fn))(?![\w-]))(\s+)((?:\w|\-|\!|\?)*)/,
- ['keyword', 'white', 'variable'],
- ],
- [
- /[a-zA-Z_#][a-zA-Z0-9_\-\?\!\*]*/,
- {
- cases: {
- '@keywords': 'keyword',
- '@constants': 'constant',
- '@operators': 'operators',
- '@default': 'identifier',
- },
- },
- ],
- { include: '@whitespace' },
- { include: '@strings' },
- ],
- comment: [
- [/[^\(comment]+/, 'comment'],
- [/\)/, 'comment', '@push'],
- [/\(comment/, 'comment', '@pop'],
- [/[\)]/, 'comment'],
- ],
- whitespace: [
- [/[ \t\r\n]+/, 'white'],
- [/\(comment/, 'comment', '@comment'],
- [/;;.*$/, 'comment'],
- ],
- strings: [
- [/"$/, 'string', '@popall'],
- [/"(?=.)/, 'string', '@multiLineString'],
- ],
- multiLineString: [
- [/\\./, 'string.escape'],
- [/"/, 'string', '@popall'],
- [/.(?=.*")/, 'string'],
- [/.*\\$/, 'string'],
- [/.*$/, 'string', '@popall'],
- ],
- },
- };
|