Last active
August 21, 2024 08:20
-
-
Save palaniraja/c987ed0cc23b3cdbfaa329ce69ed888e to your computer and use it in GitHub Desktop.
Kotlin language support for bitbucket
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
javascript:(function(){window.s0=document.createElement('script');window.s0.setAttribute('type','text/javascript');window.s0.setAttribute('src','https://bookmarkify.it/bookmarklets/58928/raw');document.getElementsByTagName('body')[0].appendChild(window.s0);})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// source: https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/kotlin/kotlin.ts | |
monaco.languages.register({ id: "kotlin" }); | |
monaco.languages.setLanguageConfiguration("kotlin", { | |
// the default separators except `@$` | |
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g, | |
comments: { | |
lineComment: '//', | |
blockComment: ['/*', '*/'] | |
}, | |
brackets: [ | |
['{', '}'], | |
['[', ']'], | |
['(', ')'] | |
], | |
autoClosingPairs: [ | |
{ open: '{', close: '}' }, | |
{ open: '[', close: ']' }, | |
{ open: '(', close: ')' }, | |
{ open: '"', close: '"' }, | |
{ open: "'", close: "'" } | |
], | |
surroundingPairs: [ | |
{ open: '{', close: '}' }, | |
{ open: '[', close: ']' }, | |
{ open: '(', close: ')' }, | |
{ open: '"', close: '"' }, | |
{ open: "'", close: "'" }, | |
{ open: '<', close: '>' } | |
], | |
folding: { | |
markers: { | |
start: new RegExp('^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))'), | |
end: new RegExp('^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))') | |
} | |
} | |
}); | |
monaco.languages.setMonarchTokensProvider("kotlin", { | |
defaultToken: '', | |
tokenPostfix: '.kt', | |
keywords: [ | |
'as', | |
'as?', | |
'break', | |
'class', | |
'continue', | |
'do', | |
'else', | |
'false', | |
'for', | |
'fun', | |
'if', | |
'in', | |
'!in', | |
'interface', | |
'is', | |
'!is', | |
'null', | |
'object', | |
'package', | |
'return', | |
'super', | |
'this', | |
'throw', | |
'true', | |
'try', | |
'typealias', | |
'val', | |
'var', | |
'when', | |
'while', | |
'by', | |
'catch', | |
'constructor', | |
'delegate', | |
'dynamic', | |
'field', | |
'file', | |
'finally', | |
'get', | |
'import', | |
'init', | |
'param', | |
'property', | |
'receiver', | |
'set', | |
'setparam', | |
'where', | |
'actual', | |
'abstract', | |
'annotation', | |
'companion', | |
'const', | |
'crossinline', | |
'data', | |
'enum', | |
'expect', | |
'external', | |
'final', | |
'infix', | |
'inline', | |
'inner', | |
'internal', | |
'lateinit', | |
'noinline', | |
'open', | |
'operator', | |
'out', | |
'override', | |
'private', | |
'protected', | |
'public', | |
'reified', | |
'sealed', | |
'suspend', | |
'tailrec', | |
'vararg', | |
'field', | |
'it' | |
], | |
operators: [ | |
'+', | |
'-', | |
'*', | |
'/', | |
'%', | |
'=', | |
'+=', | |
'-=', | |
'*=', | |
'/=', | |
'%=', | |
'++', | |
'--', | |
'&&', | |
'||', | |
'!', | |
'==', | |
'!=', | |
'===', | |
'!==', | |
'>', | |
'<', | |
'<=', | |
'>=', | |
'[', | |
']', | |
'!!', | |
'?.', | |
'?:', | |
'::', | |
'..', | |
':', | |
'?', | |
'->', | |
'@', | |
';', | |
'$', | |
'_' | |
], | |
// we include these common regular expressions | |
symbols: /[=><!~?:&|+\-*\/\^%]+/, | |
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/, | |
digits: /\d+(_+\d+)*/, | |
octaldigits: /[0-7]+(_+[0-7]+)*/, | |
binarydigits: /[0-1]+(_+[0-1]+)*/, | |
hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/, | |
// The main tokenizer for our languages | |
tokenizer: { | |
root: [ | |
// class name highlighting | |
[/[A-Z][\w\$]*/, 'type.identifier'], | |
// identifiers and keywords | |
[ | |
/[a-zA-Z_$][\w$]*/, | |
{ | |
cases: { | |
'@keywords': { token: 'keyword.$0' }, | |
'@default': 'identifier' | |
} | |
} | |
], | |
// whitespace | |
{ include: '@whitespace' }, | |
// delimiters and operators | |
[/[{}()\[\]]/, '@brackets'], | |
[/[<>](?!@symbols)/, '@brackets'], | |
[ | |
/@symbols/, | |
{ | |
cases: { | |
'@operators': 'delimiter', | |
'@default': '' | |
} | |
} | |
], | |
// @ annotations. | |
[/@\s*[a-zA-Z_\$][\w\$]*/, 'annotation'], | |
// numbers | |
[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/, 'number.float'], | |
[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/, 'number.float'], | |
[/0[xX](@hexdigits)[Ll]?/, 'number.hex'], | |
[/0(@octaldigits)[Ll]?/, 'number.octal'], | |
[/0[bB](@binarydigits)[Ll]?/, 'number.binary'], | |
[/(@digits)[fFdD]/, 'number.float'], | |
[/(@digits)[lL]?/, 'number'], | |
// delimiter: after number because of .\d floats | |
[/[;,.]/, 'delimiter'], | |
// strings | |
[/"([^"\\]|\\.)*$/, 'string.invalid'], // non-teminated string | |
[/"""/, 'string', '@multistring'], | |
[/"/, 'string', '@string'], | |
// characters | |
[/'[^\\']'/, 'string'], | |
[/(')(@escapes)(')/, ['string', 'string.escape', 'string']], | |
[/'/, 'string.invalid'] | |
], | |
whitespace: [ | |
[/[ \t\r\n]+/, ''], | |
[/\/\*\*(?!\/)/, 'comment.doc', '@javadoc'], | |
[/\/\*/, 'comment', '@comment'], | |
[/\/\/.*$/, 'comment'] | |
], | |
comment: [ | |
[/[^\/*]+/, 'comment'], | |
[/\/\*/, 'comment', '@comment'], | |
[/\*\//, 'comment', '@pop'], | |
[/[\/*]/, 'comment'] | |
], | |
//Identical copy of comment above, except for the addition of .doc | |
javadoc: [ | |
[/[^\/*]+/, 'comment.doc'], | |
[/\/\*/, 'comment.doc', '@push'], | |
[/\/\*/, 'comment.doc.invalid'], | |
[/\*\//, 'comment.doc', '@pop'], | |
[/[\/*]/, 'comment.doc'] | |
], | |
string: [ | |
[/[^\\"]+/, 'string'], | |
[/@escapes/, 'string.escape'], | |
[/\\./, 'string.escape.invalid'], | |
[/"/, 'string', '@pop'] | |
], | |
multistring: [ | |
[/[^\\"]+/, 'string'], | |
[/@escapes/, 'string.escape'], | |
[/\\./, 'string.escape.invalid'], | |
[/"""/, 'string', '@pop'], | |
[/./, 'string'] | |
] | |
}}); | |
var ed = monaco.editor.getModels()[0] | |
monaco.editor.setModelLanguage(ed, 'kotlin') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Also you can change the editor/code theme to dark mode by
monaco.editor.setTheme('vs-dark');