diff --git a/tooling/syntax/dex.iro b/tooling/syntax/dex.iro new file mode 100644 index 000000000..3ad0b16f9 --- /dev/null +++ b/tooling/syntax/dex.iro @@ -0,0 +1,91 @@ +name = dex +file_extensions [] = dx; + +styles [] { + .comment : style { + color = light_green + italic = true + textmate_scope = comment + pygments_scope = Comment + } + .keyword : style { + color = cyan + textmate_scope = keyword.other + pygments_scope = Keyword.Reserved + } + .numeric : style { + color = gold + textmate_scope = constant.numeric + pygments_scope = Number + } + .punctuation : style { + color = red + textmate_scope = punctuation + pygments_scope = Punctuation + } + .quoted_text : style { + color = brown + textmate_scope = string.quoted.double + pygments_scope = String + } + .escaped_text : style { + color = green + textmate_scope = constant.character.escape + pygments_scope = String.Escape + } + .type : style { + color = blue + textmate_scope = entity.name.type + pygments_scope = Keyword.Type + } + .operator : style { + color = orange + textmate_scope = keyword.operator + pygments_scope = Operator + } +} + +contexts [] { + main : context { + : pattern { + regex \= (\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\b) + styles [] = .keyword; + } + : pattern { + regex \= (\b(\d+\.\d+|\d+)) + styles [] = .numeric; + } + : pattern { + regex \= (\(|\)|\[|\]|\{|\}|;) + styles [] = .punctuation; + } + : inline_push { + regex \= (") + styles [] = .punctuation; + : pop { + regex \= (") + styles [] = .punctuation; + } + : pattern { + regex \= (\\(?:\\|")) + styles [] = .escaped_text; + } + : pattern { + regex \= ([^"\\]+) + styles [] = .quoted_text; + } + } + : pattern { + regex \= (--[^o].*) + styles [] = .comment; + } + : pattern { + regex \= (\b[A-Z][a-zA-Z0-9]*) + styles [] = .type; + } + : pattern { + regex \= (((\.)|(,)|(!)|(\$)|(\^)|(&)|(\*)|(:)|(-)|(~)|(\+)|(/)|(=)|(<)|(>)|(\|)|(\?)|(\\)|(@))) + styles [] = .operator; + } + } +} diff --git a/tooling/syntax/dex.plist b/tooling/syntax/dex.plist new file mode 100644 index 000000000..031697b0f --- /dev/null +++ b/tooling/syntax/dex.plist @@ -0,0 +1,116 @@ + + + + + + fileTypes + + dx + + name + dex + patterns + + + include + #main + + + scopeName + source.dex + uuid + + repository + + main + + patterns + + + match + (\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\b) + name + keyword.other.dex + + + match + (\b(\d+\.\d+|\d+)) + name + constant.numeric.dex + + + match + (\(|\)|\[|\]|\{|\}|;) + name + punctuation.dex + + + begin + (") + beginCaptures + + 1 + + name + punctuation.dex + + + patterns + + + include + #main__1 + + + end + (") + endCaptures + + 1 + + name + punctuation.dex + + + + + match + (--[^o].*) + name + comment.dex + + + match + (\b[A-Z][a-zA-Z0-9]*) + name + entity.name.type.dex + + + match + (((\.)|(,)|(!)|(\$)|(\^)|(&)|(\*)|(:)|(-)|(~)|(\+)|(/)|(=)|(<)|(>)|(\|)|(\?)|(\\)|(@))) + name + keyword.operator.dex + + + + main__1 + + patterns + + + match + (\\(?:\\|")) + name + constant.character.escape.dex + + + match + ([^\x{0022}\x{005c}]+) + name + string.quoted.double.dex + + + + + + diff --git a/tooling/syntax/dex.tmLanguage.json b/tooling/syntax/dex.tmLanguage.json new file mode 100644 index 000000000..8da7f5d98 --- /dev/null +++ b/tooling/syntax/dex.tmLanguage.json @@ -0,0 +1,74 @@ +{ + "fileTypes": [ + "dx" + ], + "name": "dex", + "patterns": [ + { + "include": "#main" + } + ], + "scopeName": "source.dex", + "uuid": "", + "repository": { + "main": { + "patterns": [ + { + "match": "(\\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\\b)", + "name": "keyword.other.dex" + }, + { + "match": "(\\b(\\d+\\.\\d+|\\d+))", + "name": "constant.numeric.dex" + }, + { + "match": "(\\(|\\)|\\[|\\]|\\{|\\}|;)", + "name": "punctuation.dex" + }, + { + "begin": "(\")", + "beginCaptures": { + "1": { + "name": "punctuation.dex" + } + }, + "patterns": [ + { + "include": "#main__1" + } + ], + "end": "(\")", + "endCaptures": { + "1": { + "name": "punctuation.dex" + } + } + }, + { + "match": "(--[^o].*)", + "name": "comment.dex" + }, + { + "match": "(\\b[A-Z][a-zA-Z0-9]*)", + "name": "entity.name.type.dex" + }, + { + "match": "(((\\.)|(,)|(!)|(\\$)|(\\^)|(&)|(\\*)|(:)|(-)|(~)|(\\+)|(\/)|(=)|(<)|(>)|(\\|)|(\\?)|(\\\\)|(@)))", + "name": "keyword.operator.dex" + } + ] + }, + "main__1": { + "patterns": [ + { + "match": "(\\\\(?:\\\\|\"))", + "name": "constant.character.escape.dex" + }, + { + "match": "([^\\x{0022}\\x{005c}]+)", + "name": "string.quoted.double.dex" + } + ] + } + } +} diff --git a/tooling/syntax/vscode/.vscode/launch.json b/tooling/syntax/vscode/.vscode/launch.json new file mode 100644 index 000000000..0e191b592 --- /dev/null +++ b/tooling/syntax/vscode/.vscode/launch.json @@ -0,0 +1,17 @@ +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ] + } + ] +} \ No newline at end of file diff --git a/tooling/syntax/vscode/.vscodeignore b/tooling/syntax/vscode/.vscodeignore new file mode 100644 index 000000000..f369b5e55 --- /dev/null +++ b/tooling/syntax/vscode/.vscodeignore @@ -0,0 +1,4 @@ +.vscode/** +.vscode-test/** +.gitignore +vsc-extension-quickstart.md diff --git a/tooling/syntax/vscode/CHANGELOG.md b/tooling/syntax/vscode/CHANGELOG.md new file mode 100644 index 000000000..676a049a6 --- /dev/null +++ b/tooling/syntax/vscode/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "dex-lang" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release \ No newline at end of file diff --git a/tooling/syntax/vscode/README.md b/tooling/syntax/vscode/README.md new file mode 100644 index 000000000..7f566841e --- /dev/null +++ b/tooling/syntax/vscode/README.md @@ -0,0 +1,76 @@ +# dex-lang README + +This is the README for your extension "dex-lang". After writing up a brief +description, we recommend including the following sections. + +## Features + +Describe specific features of your extension including screenshots of your +extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project +workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to +> show off your extension! We recommend short, focused animations that are easy +> to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and +how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the +`contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against +your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +-------------------------------------------------------------------------------- + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some +useful editor keyboard shortcuts: + +* Split the editor (``Cmd+\` on macOS or``Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and + Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of + Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** diff --git a/tooling/syntax/vscode/language-configuration.json b/tooling/syntax/vscode/language-configuration.json new file mode 100644 index 000000000..8f162a0c4 --- /dev/null +++ b/tooling/syntax/vscode/language-configuration.json @@ -0,0 +1,30 @@ +{ + "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 can be used to surround a selection + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} \ No newline at end of file diff --git a/tooling/syntax/vscode/package.json b/tooling/syntax/vscode/package.json new file mode 100644 index 000000000..84f3e2691 --- /dev/null +++ b/tooling/syntax/vscode/package.json @@ -0,0 +1,25 @@ +{ + "name": "dex-lang", + "displayName": "dex-lang", + "description": "Syntax highlighting for dex", + "version": "0.0.1", + "engines": { + "vscode": "^1.51.0" + }, + "categories": [ + "Programming Languages" + ], + "contributes": { + "languages": [{ + "id": "dex", + "aliases": ["Dex", "dex"], + "extensions": [".dx"], + "configuration": "./language-configuration.json" + }], + "grammars": [{ + "language": "dex", + "scopeName": "source.dex", + "path": "./syntaxes/dex.tmLanguage.json" + }] + } +} \ No newline at end of file diff --git a/tooling/syntax/vscode/syntaxes/dex.tmLanguage.json b/tooling/syntax/vscode/syntaxes/dex.tmLanguage.json new file mode 100644 index 000000000..21539d555 --- /dev/null +++ b/tooling/syntax/vscode/syntaxes/dex.tmLanguage.json @@ -0,0 +1,74 @@ +{ + "fileTypes": [ + "dx" + ], + "name": "dex", + "patterns": [ + { + "include": "#main" + } + ], + "scopeName": "source.dex", + "uuid": "", + "repository": { + "main": { + "patterns": [ + { + "match": "(\\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\\b)", + "name": "keyword.other.dex" + }, + { + "match": "(\\b(\\d+\\.\\d+|\\d+))", + "name": "constant.numeric.dex" + }, + { + "match": "(\\(|\\)|\\[|\\]|\\{|\\}|;)", + "name": "punctuation.dex" + }, + { + "begin": "(\")", + "beginCaptures": { + "1": { + "name": "punctuation.dex" + } + }, + "patterns": [ + { + "include": "#main__1" + } + ], + "end": "(\")", + "endCaptures": { + "1": { + "name": "punctuation.dex" + } + } + }, + { + "match": "(--[^o].*)", + "name": "comment.dex" + }, + { + "match": "(\\b[A-Z][a-zA-Z0-9]*)", + "name": "entity.name.type.dex" + }, + { + "match": "(((\\.)|(,)|(!)|(\\$)|(\\^)|(&)|(\\*)|(:)|(-)|(~)|(\\+)|(\/)|(=)|(<)|(>)|(\\|)|(\\?)|(\\\\)|(@)))", + "name": "keyword.operator.dex" + } + ] + }, + "main__1": { + "patterns": [ + { + "match": "(\\\\(?:\\\\|\"))", + "name": "constant.character.escape.dex" + }, + { + "match": "([^\\x{0022}\\x{005c}]+)", + "name": "string.quoted.double.dex" + } + ] + } + } +} \ No newline at end of file diff --git a/tooling/syntax/vscode/vsc-extension-quickstart.md b/tooling/syntax/vscode/vsc-extension-quickstart.md new file mode 100644 index 000000000..81f750f1c --- /dev/null +++ b/tooling/syntax/vscode/vsc-extension-quickstart.md @@ -0,0 +1,29 @@ +# 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 your extension. +* `syntaxes/dex.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization. +* `language-configuration.json` - this is 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 highlighting 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.