From 5518b86e30bf6e39dc60fb33950e7d74995115a3 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Mon, 19 Feb 2018 16:36:23 +0100 Subject: [PATCH] Initial commit Based on https://github.com/daltonjorge/vscode-scala plugin but using current GitHub syntax. https://github.com/mads-hartmann/scala.tmbundle/blob/559beec060634ee2c8015f777d09fc7a980fbde3/Syntaxes/Scala.tmLanguage --- LICENSE.md | 21 + README.md | 18 + images/smooth-spiral.png | Bin 0 -> 12997 bytes language-configuration.json | 33 + package.json | 43 ++ syntaxes/Scala.tmLanguage | 1189 +++++++++++++++++++++++++++++++++++ vsc-extension-quickstart.md | 27 + 7 files changed, 1331 insertions(+) create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 images/smooth-spiral.png create mode 100644 language-configuration.json create mode 100644 package.json create mode 100644 syntaxes/Scala.tmLanguage create mode 100644 vsc-extension-quickstart.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..3942950 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Nicolas Stucki + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a3fe04f --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# Scala Syntax + +This is my Scala syntax for VS Code and it is based on https://github.com/sellmerfud/scala.tmbundle + +I decided create a new extension after problems with Scala extension from Iliya Tryapitsin. + +## Features + +Only scala syntax. + +## Requirements + +No requirements. + +## License +[MIT](LICENSE) + +----------------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/images/smooth-spiral.png b/images/smooth-spiral.png new file mode 100644 index 0000000000000000000000000000000000000000..39f5c606f270e64386a1d95ce38d1fde8b7cc733 GIT binary patch literal 12997 zcmbumWmsI#vM)TiI|K_7++7BT;O@bl!Ga9#f#B}JA-Dz!?hxF926uPJ;Lbb$v-dvd zet6IQa_4zwde!Qx>Z-2lUTghUO{AKNECwnGDgXe$ke8FvfVQR3?=3PS^tZl0tqa-^ zyGiT1X*yZCd78O^01}o?<{(OW2QzDs2FT3P+j#^e3;@7U*=p&!=_)G;S~xkdnf=4V z=H&o}N&^7GVqRb~i_ai8N^_94t)mFlMSC|DrLCn1l@6~mhcZ|aWMeDm;{ww3QPHyS z`D`IzNhKyqDeNT(Rp0<}Go$o!uy=G7^b(=^FTH}$<9|-GQ&IjGi`!=rs(%@!tE@&T z>Er^U|G$b|wY!rG;mhb{|p5dlym`^xjDILIXT(? zXBO3LoZOsTZJfZAlA64f%4Qa}j{ngA#jmU^DDUX%X69%Cl9v*pf@)y1wY3zK;FJEy z&+$=OLWY}@lT(@t$jJ?q(L9QpUx}f%3mx7PS4}ZIS$6_5EAc@_)BQ>VK7GhZ@8FPhkI#K>z0yG<*Iz z{O`1d691j}AV+AnyFk+#=}qe%0ALr8my*!(T0YIOjiDKF-`I#A|54Euf0Ub%>+9iR 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 KRev-M`u_mF8`B~H literal 0 HcmV?d00001 diff --git a/language-configuration.json b/language-configuration.json new file mode 100644 index 0000000..0ec3071 --- /dev/null +++ b/language-configuration.json @@ -0,0 +1,33 @@ +{ + "comments": { + // symbol used for single line comment. Remove this entry if your language does not support line comments + "lineComment": "//", + // symbols used for start and end a block comment. Remove this entry if your language does not support block comments + "blockComment": [ "/*", "*/" ] + }, + // symbols used as brackets + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["'{", "}"], + ["'[", "]"], + ["'(", ")"] + ], + // symbols that are auto closed when typing + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ], + // symbols that that can be used to surround a selection + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..7f179ff --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "scala", + "displayName": "Scala Syntax", + "description": "Scala Syntax", + "version": "0.0.3", + "publisher": "Nicolas Stucki", + "license": "SEE LICENSE IN LICENSE.md", + "engines": { + "vscode": "^1.5.0" + }, + "homepage": "https://github.com/scala/vscode-scala-syntax/blob/master/README.md", + "repository": { + "type": "git", + "url": "https://github.com/scala/vscode-scala-syntax.git" + }, + "icon": "images/smooth-spiral.png", + "categories": [ + "Languages" + ], + "contributes": { + "languages": [ + { + "id": "scala", + "aliases": [ + "Scala", + "scala" + ], + "extensions": [ + ".scala", + ".sbt" + ], + "configuration": "./language-configuration.json" + } + ], + "grammars": [ + { + "language": "scala", + "scopeName": "source.scala", + "path": "./syntaxes/Scala.tmLanguage" + } + ] + } +} diff --git a/syntaxes/Scala.tmLanguage b/syntaxes/Scala.tmLanguage new file mode 100644 index 0000000..e088578 --- /dev/null +++ b/syntaxes/Scala.tmLanguage @@ -0,0 +1,1189 @@ + + + + + fileTypes + + scala + + firstLineMatch + ^#!/.*\b\w*scala\b + foldingStartMarker + /\*\*|\{\s*$ + foldingStopMarker + \*\*/|^\s*\} + keyEquivalent + ^~S + name + Scala + patterns + + + include + #code + + + repository + + block-comments + + begin + /\* + beginCaptures + + 1 + + name + punctuation.definition.comment.begin.scala + + + end + \*/ + endCaptures + + 1 + + name + punctuation.definition.comment.end.scala + + + name + comment.block.scala + patterns + + + include + #block-comments + + + + char-literal + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.character.begin.scala + + + end + ' + endCaptures + + 0 + + name + punctuation.definition.character.end.scala + + + name + constant.character.literal.scala + patterns + + + match + \\(?:[btnfr\\"']|[0-7]{1,3}|u[0-9A-Fa-f]{4}) + name + constant.character.escape.scala + + + match + \\. + name + invalid.illegal.unrecognized-character-escape.scala + + + match + [^']{2,} + name + invalid.illegal.character-literal-too-long + + + match + (?<!')[^'] + name + invalid.illegal.character-literal-too-long + + + + code + + patterns + + + include + #storage-modifiers + + + include + #declarations + + + include + #inheritance + + + include + #imports + + + include + #comments + + + include + #strings + + + include + #initialization + + + include + #xml-literal + + + include + #keywords + + + include + #constants + + + include + #scala-symbol + + + include + #char-literal + + + include + #empty-blocks + + + include + #parameter-list + + + include + #qualifiedClassName + + + include + #meta-brackets + + + include + #meta-bounds + + + include + #meta-colons + + + + comments + + patterns + + + captures + + 0 + + name + punctuation.definition.comment.scala + + + match + /\*\*/ + name + comment.block.empty.scala + + + begin + ^\s*(/\*\*) + beginCaptures + + 1 + + name + punctuation.definition.comment.scala + + + end + \*/ + endCaptures + + 0 + + name + punctuation.definition.comment.scala + + + name + comment.block.documentation.scala + patterns + + + captures + + 1 + + name + keyword.other.documentation.scaladoc.scala + + 2 + + name + variable.parameter.scala + + + match + (@param)\s+(\S+) + + + captures + + 1 + + name + keyword.other.documentation.scaladoc.scala + + 2 + + name + entity.name.type.class.scala + + + match + (@(?:tparam|throws))\s+(\S+) + + + match + @(return|see|note|example|usecase|author|version|since|todo|deprecated|migration|define|inheritdoc)\b + name + keyword.other.documentation.scaladoc.scala + + + captures + + 1 + + name + punctuation.definition.documentation.link.scala + + 2 + + name + entity.name.type.class.documentation.link.scala + + 3 + + name + punctuation.definition.documentation.link.scala + + + match + (\[\[)([^\]]+)(\]\]) + + + + + include + #block-comments + + + captures + + 1 + + name + comment.line.double-slash.scala + + 2 + + name + punctuation.definition.comment.scala + + + match + \s*((//).*$\n?) + + + + constants + + patterns + + + match + \b(false|null|true|Nil|None)\b + name + constant.language.scala + + + match + \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b + name + constant.numeric.scala + + + match + \b(this|super|self)\b + name + variable.language.scala + + + match + \b(Unit|Boolean|Byte|Char|Short|Int|Float|Long|Double)\b + name + storage.type.primitive.scala + + + match + \b(String|Symbol)\b + name + storage.type.scala + + + + declarations + + patterns + + + captures + + 1 + + name + keyword.control.def.scala + + 2 + + name + entity.name.function.declaration.scala + + + match + (?x) + \b(def)\s+ + (`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*(?:_[^\s])(?=[(\t ])|[_$a-zA-Z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+) + + + captures + + 1 + + name + storage.modifier.case.scala + + 2 + + name + storage.type.$1.scala + + 3 + + name + entity.name.type.class.declaration.scala + + + match + (?:(case) +)?\b(class|trait|object)\s+([^\s\{\(\[]+) + + + captures + + 1 + + name + keyword.control.type.scala + + 2 + + name + entity.name.type.type.declaration.scala + + + match + \b(type)\s+(`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*(?:_[^\s])(?=[\t ])|[_$a-zA-Z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+) + + + captures + + 1 + + name + storage.type.stable.scala + + 2 + + name + storage.type.volatile.scala + + 3 + + name + entity.name.type.val.declaration.scala + + + match + \b(?:(val)|(var))\s+(?:(`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*(?:_[^\s])(?=[\t ])|[_$a-zA-Z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+)|(?=\()) + + + captures + + 1 + + name + storage.type.package.scala + + 2 + + name + storage.type.package.object.scala + + 3 + + name + entity.name.type.class.declaration.scala + + + match + \b(package) (object)\s+([^\s\{\(\[]+) + + + captures + + 1 + + name + storage.type.package.scala + + 2 + + name + entity.name.type.package.scala + + + match + \b(package)\s+([\w\.]+) + name + meta.package.scala + + + + empty-blocks + + patterns + + + captures + + 1 + + name + punctuation.definition.parentheses.begin.scala + + 2 + + name + punctuation.definition.parentheses.end.scala + + + match + (\()(\)) + name + meta.parentheses.scala + + + captures + + 1 + + name + punctuation.definition.parentheses.begin.scala + + 2 + + name + punctuation.definition.parentheses.end.scala + + + match + (\{)(\}) + name + meta.braces.scala + + + + imports + + begin + \b(import)\s+ + beginCaptures + + 1 + + name + keyword.control.import.scala + + + end + (?<=[\n;]) + name + meta.import.scala + patterns + + + include + #comments + + + match + ([^\s{;.]+)\s*\.\s* + name + variable.other.package.scala + + + match + ([^\s{;.]+)\s* + name + variable.other.import.scala + + + begin + { + beginCaptures + + 0 + + name + meta.bracket.scala + + + end + } + endCaptures + + 0 + + name + meta.bracket.scala + + + name + meta.import.selector.scala + patterns + + + captures + + 1 + + name + variable.other.import.renamed-from.scala + + 2 + + name + keyword.operator.scala + + 3 + + name + variable.other.import.renamed-to.scala + + + match + (?x) \s* + ([^\s.,}]+) \s* + (=>) \s* + ([^\s.,}]+) \s* + + + + match + ([^\s.,}]+) + name + variable.other.import.scala + + + + + + inheritance + + patterns + + + captures + + 1 + + name + storage.modifier.extends.scala + + 2 + + name + entity.other.inherited-class.scala + + + match + (extends|with)\s+([^\s\{\(\[\]]+) + + + + initialization + + captures + + 1 + + name + keyword.control.directive.scala + + 2 + + name + entity.name.type.class.scala + + + match + \b(new)\s+([^\s\{\(\[]+) + + keywords + + patterns + + + match + \b(return|throw)\b + name + keyword.control.flow.jump.scala + + + match + \b(classOf|isInstanceOf|asInstanceOf)\b + name + support.function.type-of.scala + + + match + \b(else|if|do|while|for|yield|match|case)\b + name + keyword.control.flow.scala + + + match + \b(catch|finally|try)\b + name + keyword.control.exception.scala + + + match + (==?|!=|<=|>=|<>|<|>) + name + keyword.operator.comparison.scala + + + match + (\-|\+|\*|/(?![/*])|%|~) + name + keyword.operator.arithmetic.scala + + + match + (!|&&|\|\|) + name + keyword.operator.logical.scala + + + match + (<-|←|->|→|=>|⇒|\?|\:+|@|\|)+ + name + keyword.operator.scala + + + + meta-bounds + + comment + For themes: Matching view bounds + match + <%|=:=|<:<|<%<|>:|<: + name + meta.bounds.scala + + meta-brackets + + comment + For themes: Brackets look nice when colored. + patterns + + + match + {|}|\(|\)|\[|\] + name + meta.bracket.scala + + + + meta-colons + + comment + For themes: Matching type colons + patterns + + + match + (?<!:):(?!:) + name + meta.colon.scala + + + + parameter-list + + patterns + + + captures + + 1 + + name + variable.parameter.scala + + 2 + + name + meta.colon.scala + + + comment + We do not match param names that start with a Capitol letter + match + (?<=[^\._$a-zA-Z0-9])(`[^`]+`|[_$a-z][_$a-zA-Z0-9]*(?:_[^\s])(?=[\t ])|[_$a-z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+)\s*(:)\s+ + + + + qualifiedClassName + + captures + + 1 + + name + entity.name.type.class.scala + + + match + (\b([A-Z][\w]*)) + + scala-symbol + + match + '\w+(?=[^'\w]) + name + entity.name.type.symbol.scala + + storage-modifiers + + patterns + + + match + \b(private\[\S+\]|protected\[\S+\]|private|protected)\b + name + storage.modifier.access.scala + + + match + \b(synchronized|@volatile|abstract|final|lazy|sealed|implicit|override|@transient|@native)\b + name + storage.modifier.other.scala + + + + strings + + patterns + + + begin + """ + beginCaptures + + 0 + + name + punctuation.definition.string.begin.scala + + + end + """(?!") + endCaptures + + 0 + + name + punctuation.definition.string.end.scala + + + name + string.quoted.triple.scala + patterns + + + match + \\\\|\\u[0-9A-Fa-f]{4} + name + constant.character.escape.scala + + + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.scala + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.scala + + + name + string.quoted.double.scala + patterns + + + match + \\(?:[btnfr\\"']|[0-7]{1,3}|u[0-9A-Fa-f]{4}) + name + constant.character.escape.scala + + + match + \\. + name + invalid.illegal.unrecognized-string-escape.scala + + + + + + xml-doublequotedString + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.xml + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.xml + + + name + string.quoted.double.xml + patterns + + + include + #xml-entity + + + + xml-embedded-content + + patterns + + + begin + { + captures + + 0 + + name + meta.bracket.scala + + + end + } + name + meta.source.embedded.scala + patterns + + + include + #code + + + + + captures + + 1 + + name + entity.other.attribute-name.namespace.xml + + 2 + + name + entity.other.attribute-name.xml + + 3 + + name + punctuation.separator.namespace.xml + + 4 + + name + entity.other.attribute-name.localname.xml + + + match + (?:([-_a-zA-Z0-9]+)((:)))?([_a-zA-Z-]+)= + + + include + #xml-doublequotedString + + + include + #xml-singlequotedString + + + + xml-entity + + captures + + 1 + + name + punctuation.definition.constant.xml + + 3 + + name + punctuation.definition.constant.xml + + + match + (&)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;) + name + constant.character.entity.xml + + xml-literal + + patterns + + + begin + (<)((?:([_a-zA-Z0-9][_a-zA-Z0-9]*)((:)))?([_a-zA-Z0-9][-_a-zA-Z0-9:]*))(?=(\s[^>]*)?></\2>) + beginCaptures + + 1 + + name + punctuation.definition.tag.xml + + 3 + + name + entity.name.tag.namespace.xml + + 4 + + name + entity.name.tag.xml + + 5 + + name + punctuation.separator.namespace.xml + + 6 + + name + entity.name.tag.localname.xml + + + comment + We do not allow a tag name to start with a - since this would + likely conflict with the <- operator. This is not very common + for tag names anyway. Also code such as -- if (val <val2 || val> val3) + will falsly be recognized as an xml tag. The solution is to put a + space on either side of the comparison operator + end + (>(<))/(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]*[_a-zA-Z0-9])(>) + endCaptures + + 1 + + name + punctuation.definition.tag.xml + + 2 + + name + meta.scope.between-tag-pair.xml + + 3 + + name + entity.name.tag.namespace.xml + + 4 + + name + entity.name.tag.xml + + 5 + + name + punctuation.separator.namespace.xml + + 6 + + name + entity.name.tag.localname.xml + + 7 + + name + punctuation.definition.tag.xml + + + name + meta.tag.no-content.xml + patterns + + + include + #xml-embedded-content + + + + + begin + (</?)(?:([_a-zA-Z0-9][-_a-zA-Z0-9]*)((:)))?([_a-zA-Z0-9][-_a-zA-Z0-9:]*)(?=[^>]*?>) + captures + + 1 + + name + punctuation.definition.tag.xml + + 2 + + name + entity.name.tag.namespace.xml + + 3 + + name + entity.name.tag.xml + + 4 + + name + punctuation.separator.namespace.xml + + 5 + + name + entity.name.tag.localname.xml + + + end + (/?>) + name + meta.tag.xml + patterns + + + include + #xml-embedded-content + + + + + include + #xml-entity + + + + xml-singlequotedString + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.xml + + + end + ' + endCaptures + + 0 + + name + punctuation.definition.string.end.xml + + + name + string.quoted.single.xml + patterns + + + include + #xml-entity + + + + + scopeName + source.scala + uuid + 158C0929-299A-40C8-8D89-316BE0C446E8 + + diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md new file mode 100644 index 0000000..5c03c0b --- /dev/null +++ b/vsc-extension-quickstart.md @@ -0,0 +1,27 @@ +# Welcome to your VS Code Extension + +## What's in the folder +* This folder contains all of the files necessary for your extension +* `package.json` - this is the manifest file in which you declare your language support and define +the location of the grammar file that has been copied into you extension. +* `syntaxes/Scala.tmLanguage` - this is the Text mate grammar file that is used for tokenization +* `language-configuration.json` - this the language configuration, defining the tokens that are used for +comments and brackets. + +## Get up and running straight away +* Make sure the language configuration settings in `language-configuration.json` are accurate +* press `F5` to open a new window with your extension loaded +* create a new file with a file name suffix matching your language +* verify that syntax highlight works and that the language configuration settings are working + +## Make changes +* you can relaunch the extension from the debug toolbar after making changes to the files listed above +* you can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes + +## Add more language features +* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at +https://code.visualstudio.com/docs + +## Install your extension +* To start using your extension with Visual Studio Code copy it into the /.vscode/extensions folder and restart Code. +* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. \ No newline at end of file