├── .gitignore
├── .vscode
├── extensions.json
├── launch.json
├── settings.json
└── tasks.json
├── .vscodeignore
├── CHANGELOG.md
├── README.md
├── code-groovy-0.0.1.vsix
├── code-groovy-0.0.5.gif
├── groovy.png
├── language-configuration-gsp.json
├── out
├── extension.js
├── extension.js.map
└── test
│ ├── extension.test.js
│ ├── extension.test.js.map
│ ├── index.js
│ └── index.js.map
├── package-lock.json
├── package.json
├── snippets
├── groovy.json
└── gsp.json
├── src
├── extension.ts
├── file_parser.ts
├── groovy_document_symbol_provider.ts
├── sort_lines.ts
└── test
│ ├── extension.test.ts
│ └── index.ts
├── syntaxes
├── gsp.cson.json
└── gsp.tmLanguage
├── tsconfig.json
├── tslint.json
└── vsc-extension-quickstart.md
/.gitignore:
--------------------------------------------------------------------------------
1 | out
2 | node_modules
3 | .vscode-test/
4 | *.vsix
5 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // See http://go.microsoft.com/fwlink/?LinkId=827846
3 | // for the documentation about the extensions.json format
4 | "recommendations": [
5 | "eg2.tslint"
6 | ]
7 | }
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // A launch configuration that compiles the extension and then opens it inside a new window
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | {
6 | "version": "0.2.0",
7 | "configurations": [
8 | {
9 | "name": "Extension",
10 | "type": "extensionHost",
11 | "request": "launch",
12 | "runtimeExecutable": "${execPath}",
13 | "args": [
14 | "--extensionDevelopmentPath=${workspaceFolder}"
15 | ],
16 | "outFiles": [
17 | "${workspaceFolder}/out/**/*.js"
18 | ],
19 | "preLaunchTask": "npm: watch"
20 | },
21 | {
22 | "name": "Extension Tests",
23 | "type": "extensionHost",
24 | "request": "launch",
25 | "runtimeExecutable": "${execPath}",
26 | "args": [
27 | "--extensionDevelopmentPath=${workspaceFolder}",
28 | "--extensionTestsPath=${workspaceFolder}/out/test"
29 | ],
30 | "outFiles": [
31 | "${workspaceFolder}/out/test/**/*.js"
32 | ],
33 | "preLaunchTask": "npm: watch"
34 | }
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | // Place your settings in this file to overwrite default and user settings.
2 | {
3 | "files.exclude": {
4 | "out": false // set this to true to hide the "out" folder with the compiled JS files
5 | },
6 | "search.exclude": {
7 | "out": true // set this to false to include "out" folder in search results
8 | },
9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts
10 | "typescript.tsc.autoDetect": "off"
11 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | // See https://go.microsoft.com/fwlink/?LinkId=733558
2 | // for the documentation about the tasks.json format
3 | {
4 | "version": "2.0.0",
5 | "tasks": [
6 | {
7 | "type": "npm",
8 | "script": "watch",
9 | "problemMatcher": "$tsc-watch",
10 | "isBackground": true,
11 | "presentation": {
12 | "reveal": "never"
13 | },
14 | "group": {
15 | "kind": "build",
16 | "isDefault": true
17 | }
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | .vscode/**
2 | .vscode-test/**
3 | out/test/**
4 | out/**/*.map
5 | src/**
6 | .gitignore
7 | tsconfig.json
8 | vsc-extension-quickstart.md
9 | tslint.json
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 | All notable changes to the "code-groovy" extension will be documented in this file.
3 |
4 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
5 |
6 | ## [Unreleased]
7 | - Initial release
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Language support for Groovy ™ for Visual Studio Code
2 | =====================
3 |
4 | Better groovy support for VSCode
5 |
6 | 
7 |
8 | Features
9 | ===============
10 |
11 | - Groovy organize imports
12 | - Groovy organize service injections
13 | - Groovy code snippets
14 | - Groovy symbol support
15 | - GSP syntax
16 | - GSP snippets
17 |
18 | Requirements
19 | ===============
20 |
21 | Extension Settings
22 | ===============
23 |
24 | Known Issues
25 | ===============
26 |
27 | Contributing
28 | ===============
29 |
30 | This is an open source project open to anyone. Contributions are extremely welcome!
31 |
32 | Report any problems you face to the [project](https://github.com/marlon407/code-groovy/issues).
33 |
34 | Disclaimer
35 | ===============
36 |
37 | Lots of help from [vscode-sort-lines](https://github.com/Tyriar/vscode-sort-lines/).
38 |
39 | Groovy symbol support based on [vscode-groovy](https://gitlab.com/awl/vscode-grails).
--------------------------------------------------------------------------------
/code-groovy-0.0.1.vsix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marlon407/code-groovy/030563f8f899bc897113e4ae19f4d64eb6d72d0c/code-groovy-0.0.1.vsix
--------------------------------------------------------------------------------
/code-groovy-0.0.5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marlon407/code-groovy/030563f8f899bc897113e4ae19f4d64eb6d72d0c/code-groovy-0.0.5.gif
--------------------------------------------------------------------------------
/groovy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marlon407/code-groovy/030563f8f899bc897113e4ae19f4d64eb6d72d0c/groovy.png
--------------------------------------------------------------------------------
/language-configuration-gsp.json:
--------------------------------------------------------------------------------
1 | {
2 | "comments": {
3 | "blockComment": [ "<%--", "--%>" ]
4 | },
5 | "brackets": [
6 | [""],
7 | ["<%", "%>"],
8 | ["<%@", "%>"],
9 | ["<%=", "%>"],
10 | ["<%--", "--%>"],
11 | ["<", ">"],
12 | ["{", "}"],
13 | ["(", ")"]
14 | ],
15 | "autoClosingPairs": [
16 | { "open": "{", "close": "}"},
17 | { "open": "[", "close": "]"},
18 | { "open": "(", "close": ")" },
19 | { "open": "'", "close": "'" },
20 | { "open": "\"", "close": "\"" },
21 | { "open": "", "notIn": [ "comment", "string" ]},
22 | { "open": "<%", "close": "%>", "notIn": [ "string" ]},
23 | { "open": "<%=", "close": "%>", "notIn": [ "string" ]},
24 | { "open": "<%--", "close": "--%>", "notIn": [ "comment", "string" ]}
25 | ],
26 | "surroundingPairs": [
27 | { "open": "'", "close": "'" },
28 | { "open": "\"", "close": "\"" },
29 | { "open": "{", "close": "}"},
30 | { "open": "[", "close": "]"},
31 | { "open": "(", "close": ")" },
32 | { "open": "<", "close": ">" }
33 | ]
34 | }
35 |
--------------------------------------------------------------------------------
/out/extension.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const vscode = require("vscode");
4 | const sortLines = require("./sort_lines");
5 | const groovy_document_symbol_provider_1 = require("./groovy_document_symbol_provider");
6 | function activate(context) {
7 | const commands = [
8 | vscode.commands.registerCommand('cgroovy.organizeImports', sortLines.sortImports),
9 | vscode.commands.registerCommand('cgroovy.organizeDependences', sortLines.sortDependeces),
10 | ];
11 | const languages = [
12 | vscode.languages.registerDocumentSymbolProvider({ language: 'groovy', scheme: 'file' }, new groovy_document_symbol_provider_1.default())
13 | ];
14 | commands.forEach(command => context.subscriptions.push(command));
15 | languages.forEach(language => context.subscriptions.push(language));
16 | }
17 | exports.activate = activate;
18 | function deactivate() {
19 | }
20 | exports.deactivate = deactivate;
21 | //# sourceMappingURL=extension.js.map
--------------------------------------------------------------------------------
/out/extension.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,iCAAiC;AACjC,0CAA0C;AAC1C,uFAA6E;AAE7E,kBAAyB,OAAgC;IAErD,MAAM,QAAQ,GAAG;QACf,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,yBAAyB,EAAE,SAAS,CAAC,WAAW,CAAC;QACjF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,6BAA6B,EAAE,SAAS,CAAC,cAAc,CAAC;KACzF,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,yCAA4B,EAAE,CAAC;KAC9H,CAAC;IAEF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAExE,CAAC;AAdD,4BAcC;AAED;AACA,CAAC;AADD,gCACC"}
--------------------------------------------------------------------------------
/out/test/extension.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //
3 | // Note: This example test is leveraging the Mocha test framework.
4 | // Please refer to their documentation on https://mochajs.org/ for help.
5 | //
6 | Object.defineProperty(exports, "__esModule", { value: true });
7 | // The module 'assert' provides assertion methods from node
8 | const assert = require("assert");
9 | // You can import and use all API from the 'vscode' module
10 | // as well as import your extension to test it
11 | // import * as vscode from 'vscode';
12 | // import * as myExtension from '../extension';
13 | // Defines a Mocha test suite to group tests of similar kind together
14 | suite("Extension Tests", function () {
15 | // Defines a Mocha unit test
16 | test("Something 1", function () {
17 | assert.equal(-1, [1, 2, 3].indexOf(5));
18 | assert.equal(-1, [1, 2, 3].indexOf(0));
19 | });
20 | });
21 | //# sourceMappingURL=extension.test.js.map
--------------------------------------------------------------------------------
/out/test/extension.test.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../src/test/extension.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,kEAAkE;AAClE,wEAAwE;AACxE,EAAE;;AAEF,2DAA2D;AAC3D,iCAAiC;AAEjC,0DAA0D;AAC1D,8CAA8C;AAC9C,oCAAoC;AACpC,+CAA+C;AAE/C,qEAAqE;AACrE,KAAK,CAAC,iBAAiB,EAAE;IAErB,4BAA4B;IAC5B,IAAI,CAAC,aAAa,EAAE;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
--------------------------------------------------------------------------------
/out/test/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //
3 | // PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING
4 | //
5 | // This file is providing the test runner to use when running extension tests.
6 | // By default the test runner in use is Mocha based.
7 | //
8 | // You can provide your own test runner if you want to override it by exporting
9 | // a function run(testRoot: string, clb: (error:Error) => void) that the extension
10 | // host can call to run the tests. The test runner is expected to use console.log
11 | // to report the results back to the caller. When the tests are finished, return
12 | // a possible error to the callback or null if none.
13 | Object.defineProperty(exports, "__esModule", { value: true });
14 | const testRunner = require("vscode/lib/testrunner");
15 | // You can directly control Mocha options by uncommenting the following lines
16 | // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info
17 | testRunner.configure({
18 | ui: 'tdd',
19 | useColors: true // colored output from test results
20 | });
21 | module.exports = testRunner;
22 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/out/test/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,mEAAmE;AACnE,EAAE;AACF,8EAA8E;AAC9E,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,gFAAgF;AAChF,oDAAoD;;AAEpD,oDAAoD;AAEpD,6EAA6E;AAC7E,mGAAmG;AACnG,UAAU,CAAC,SAAS,CAAC;IACjB,EAAE,EAAE,KAAK;IACT,SAAS,EAAE,IAAI,CAAC,mCAAmC;CACtD,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC"}
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "code-groovy",
3 | "version": "0.1.1",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/mocha": {
8 | "version": "2.2.48",
9 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz",
10 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==",
11 | "dev": true
12 | },
13 | "@types/node": {
14 | "version": "8.10.37",
15 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.37.tgz",
16 | "integrity": "sha512-Jp39foY8Euv/PG4OGPyzxis82mnjcUtXLEMA8oFMCE4ilmuJgZPdV2nZNV1moz+99EJTtcpOSgDCgATUwABKig==",
17 | "dev": true
18 | },
19 | "agent-base": {
20 | "version": "4.3.0",
21 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
22 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
23 | "dev": true,
24 | "requires": {
25 | "es6-promisify": "^5.0.0"
26 | }
27 | },
28 | "ajv": {
29 | "version": "6.10.2",
30 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
31 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
32 | "dev": true,
33 | "requires": {
34 | "fast-deep-equal": "^2.0.1",
35 | "fast-json-stable-stringify": "^2.0.0",
36 | "json-schema-traverse": "^0.4.1",
37 | "uri-js": "^4.2.2"
38 | }
39 | },
40 | "ansi-regex": {
41 | "version": "2.1.1",
42 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
43 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
44 | "dev": true
45 | },
46 | "ansi-styles": {
47 | "version": "2.2.1",
48 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
49 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
50 | "dev": true
51 | },
52 | "argparse": {
53 | "version": "1.0.10",
54 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
55 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
56 | "dev": true,
57 | "requires": {
58 | "sprintf-js": "~1.0.2"
59 | }
60 | },
61 | "asn1": {
62 | "version": "0.2.4",
63 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
64 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
65 | "dev": true,
66 | "requires": {
67 | "safer-buffer": "~2.1.0"
68 | }
69 | },
70 | "assert-plus": {
71 | "version": "1.0.0",
72 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
73 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
74 | "dev": true
75 | },
76 | "asynckit": {
77 | "version": "0.4.0",
78 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
79 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
80 | "dev": true
81 | },
82 | "aws-sign2": {
83 | "version": "0.7.0",
84 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
85 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
86 | "dev": true
87 | },
88 | "aws4": {
89 | "version": "1.8.0",
90 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
91 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
92 | "dev": true
93 | },
94 | "babel-code-frame": {
95 | "version": "6.26.0",
96 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
97 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
98 | "dev": true,
99 | "requires": {
100 | "chalk": "^1.1.3",
101 | "esutils": "^2.0.2",
102 | "js-tokens": "^3.0.2"
103 | },
104 | "dependencies": {
105 | "chalk": {
106 | "version": "1.1.3",
107 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
108 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
109 | "dev": true,
110 | "requires": {
111 | "ansi-styles": "^2.2.1",
112 | "escape-string-regexp": "^1.0.2",
113 | "has-ansi": "^2.0.0",
114 | "strip-ansi": "^3.0.0",
115 | "supports-color": "^2.0.0"
116 | }
117 | }
118 | }
119 | },
120 | "balanced-match": {
121 | "version": "1.0.0",
122 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
123 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
124 | "dev": true
125 | },
126 | "bcrypt-pbkdf": {
127 | "version": "1.0.2",
128 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
129 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
130 | "dev": true,
131 | "requires": {
132 | "tweetnacl": "^0.14.3"
133 | }
134 | },
135 | "brace-expansion": {
136 | "version": "1.1.11",
137 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
138 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
139 | "dev": true,
140 | "requires": {
141 | "balanced-match": "^1.0.0",
142 | "concat-map": "0.0.1"
143 | }
144 | },
145 | "browser-stdout": {
146 | "version": "1.3.1",
147 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
148 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
149 | "dev": true
150 | },
151 | "buffer-from": {
152 | "version": "1.1.1",
153 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
154 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
155 | "dev": true
156 | },
157 | "builtin-modules": {
158 | "version": "1.1.1",
159 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
160 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
161 | "dev": true
162 | },
163 | "caseless": {
164 | "version": "0.12.0",
165 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
166 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
167 | "dev": true
168 | },
169 | "chalk": {
170 | "version": "2.4.1",
171 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
172 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
173 | "dev": true,
174 | "requires": {
175 | "ansi-styles": "^3.2.1",
176 | "escape-string-regexp": "^1.0.5",
177 | "supports-color": "^5.3.0"
178 | },
179 | "dependencies": {
180 | "ansi-styles": {
181 | "version": "3.2.1",
182 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
183 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
184 | "dev": true,
185 | "requires": {
186 | "color-convert": "^1.9.0"
187 | }
188 | },
189 | "supports-color": {
190 | "version": "5.5.0",
191 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
192 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
193 | "dev": true,
194 | "requires": {
195 | "has-flag": "^3.0.0"
196 | }
197 | }
198 | }
199 | },
200 | "color-convert": {
201 | "version": "1.9.3",
202 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
203 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
204 | "dev": true,
205 | "requires": {
206 | "color-name": "1.1.3"
207 | }
208 | },
209 | "color-name": {
210 | "version": "1.1.3",
211 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
212 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
213 | "dev": true
214 | },
215 | "combined-stream": {
216 | "version": "1.0.8",
217 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
218 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
219 | "dev": true,
220 | "requires": {
221 | "delayed-stream": "~1.0.0"
222 | }
223 | },
224 | "commander": {
225 | "version": "2.19.0",
226 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
227 | "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
228 | "dev": true
229 | },
230 | "concat-map": {
231 | "version": "0.0.1",
232 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
233 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
234 | "dev": true
235 | },
236 | "core-util-is": {
237 | "version": "1.0.2",
238 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
239 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
240 | "dev": true
241 | },
242 | "dashdash": {
243 | "version": "1.14.1",
244 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
245 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
246 | "dev": true,
247 | "requires": {
248 | "assert-plus": "^1.0.0"
249 | }
250 | },
251 | "debug": {
252 | "version": "3.1.0",
253 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
254 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
255 | "dev": true,
256 | "requires": {
257 | "ms": "2.0.0"
258 | }
259 | },
260 | "delayed-stream": {
261 | "version": "1.0.0",
262 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
263 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
264 | "dev": true
265 | },
266 | "diff": {
267 | "version": "3.5.0",
268 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
269 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
270 | "dev": true
271 | },
272 | "ecc-jsbn": {
273 | "version": "0.1.2",
274 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
275 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
276 | "dev": true,
277 | "requires": {
278 | "jsbn": "~0.1.0",
279 | "safer-buffer": "^2.1.0"
280 | }
281 | },
282 | "es6-promise": {
283 | "version": "4.2.8",
284 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
285 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
286 | "dev": true
287 | },
288 | "es6-promisify": {
289 | "version": "5.0.0",
290 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
291 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
292 | "dev": true,
293 | "requires": {
294 | "es6-promise": "^4.0.3"
295 | }
296 | },
297 | "escape-string-regexp": {
298 | "version": "1.0.5",
299 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
300 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
301 | "dev": true
302 | },
303 | "esprima": {
304 | "version": "4.0.1",
305 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
306 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
307 | "dev": true
308 | },
309 | "esutils": {
310 | "version": "2.0.2",
311 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
312 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
313 | "dev": true
314 | },
315 | "extend": {
316 | "version": "3.0.2",
317 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
318 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
319 | "dev": true
320 | },
321 | "extsprintf": {
322 | "version": "1.3.0",
323 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
324 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
325 | "dev": true
326 | },
327 | "fast-deep-equal": {
328 | "version": "2.0.1",
329 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
330 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
331 | "dev": true
332 | },
333 | "fast-json-stable-stringify": {
334 | "version": "2.0.0",
335 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
336 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
337 | "dev": true
338 | },
339 | "forever-agent": {
340 | "version": "0.6.1",
341 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
342 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
343 | "dev": true
344 | },
345 | "form-data": {
346 | "version": "2.3.3",
347 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
348 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
349 | "dev": true,
350 | "requires": {
351 | "asynckit": "^0.4.0",
352 | "combined-stream": "^1.0.6",
353 | "mime-types": "^2.1.12"
354 | }
355 | },
356 | "fs.realpath": {
357 | "version": "1.0.0",
358 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
359 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
360 | "dev": true
361 | },
362 | "getpass": {
363 | "version": "0.1.7",
364 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
365 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
366 | "dev": true,
367 | "requires": {
368 | "assert-plus": "^1.0.0"
369 | }
370 | },
371 | "glob": {
372 | "version": "7.1.3",
373 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
374 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
375 | "dev": true,
376 | "requires": {
377 | "fs.realpath": "^1.0.0",
378 | "inflight": "^1.0.4",
379 | "inherits": "2",
380 | "minimatch": "^3.0.4",
381 | "once": "^1.3.0",
382 | "path-is-absolute": "^1.0.0"
383 | }
384 | },
385 | "growl": {
386 | "version": "1.10.5",
387 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
388 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
389 | "dev": true
390 | },
391 | "har-schema": {
392 | "version": "2.0.0",
393 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
394 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
395 | "dev": true
396 | },
397 | "har-validator": {
398 | "version": "5.1.3",
399 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
400 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
401 | "dev": true,
402 | "requires": {
403 | "ajv": "^6.5.5",
404 | "har-schema": "^2.0.0"
405 | }
406 | },
407 | "has-ansi": {
408 | "version": "2.0.0",
409 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
410 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
411 | "dev": true,
412 | "requires": {
413 | "ansi-regex": "^2.0.0"
414 | }
415 | },
416 | "has-flag": {
417 | "version": "3.0.0",
418 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
419 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
420 | "dev": true
421 | },
422 | "he": {
423 | "version": "1.1.1",
424 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
425 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
426 | "dev": true
427 | },
428 | "http-proxy-agent": {
429 | "version": "2.1.0",
430 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
431 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
432 | "dev": true,
433 | "requires": {
434 | "agent-base": "4",
435 | "debug": "3.1.0"
436 | }
437 | },
438 | "http-signature": {
439 | "version": "1.2.0",
440 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
441 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
442 | "dev": true,
443 | "requires": {
444 | "assert-plus": "^1.0.0",
445 | "jsprim": "^1.2.2",
446 | "sshpk": "^1.7.0"
447 | }
448 | },
449 | "https-proxy-agent": {
450 | "version": "2.2.2",
451 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz",
452 | "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==",
453 | "dev": true,
454 | "requires": {
455 | "agent-base": "^4.3.0",
456 | "debug": "^3.1.0"
457 | }
458 | },
459 | "inflight": {
460 | "version": "1.0.6",
461 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
462 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
463 | "dev": true,
464 | "requires": {
465 | "once": "^1.3.0",
466 | "wrappy": "1"
467 | }
468 | },
469 | "inherits": {
470 | "version": "2.0.3",
471 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
472 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
473 | "dev": true
474 | },
475 | "is-typedarray": {
476 | "version": "1.0.0",
477 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
478 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
479 | "dev": true
480 | },
481 | "isstream": {
482 | "version": "0.1.2",
483 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
484 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
485 | "dev": true
486 | },
487 | "js-tokens": {
488 | "version": "3.0.2",
489 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
490 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
491 | "dev": true
492 | },
493 | "js-yaml": {
494 | "version": "3.13.1",
495 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
496 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
497 | "dev": true,
498 | "requires": {
499 | "argparse": "^1.0.7",
500 | "esprima": "^4.0.0"
501 | }
502 | },
503 | "jsbn": {
504 | "version": "0.1.1",
505 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
506 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
507 | "dev": true
508 | },
509 | "json-schema": {
510 | "version": "0.2.3",
511 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
512 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
513 | "dev": true
514 | },
515 | "json-schema-traverse": {
516 | "version": "0.4.1",
517 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
518 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
519 | "dev": true
520 | },
521 | "json-stringify-safe": {
522 | "version": "5.0.1",
523 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
524 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
525 | "dev": true
526 | },
527 | "jsprim": {
528 | "version": "1.4.1",
529 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
530 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
531 | "dev": true,
532 | "requires": {
533 | "assert-plus": "1.0.0",
534 | "extsprintf": "1.3.0",
535 | "json-schema": "0.2.3",
536 | "verror": "1.10.0"
537 | }
538 | },
539 | "mime-db": {
540 | "version": "1.40.0",
541 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
542 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
543 | "dev": true
544 | },
545 | "mime-types": {
546 | "version": "2.1.24",
547 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
548 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
549 | "dev": true,
550 | "requires": {
551 | "mime-db": "1.40.0"
552 | }
553 | },
554 | "minimatch": {
555 | "version": "3.0.4",
556 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
557 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
558 | "dev": true,
559 | "requires": {
560 | "brace-expansion": "^1.1.7"
561 | }
562 | },
563 | "minimist": {
564 | "version": "0.0.8",
565 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
566 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
567 | "dev": true
568 | },
569 | "mkdirp": {
570 | "version": "0.5.1",
571 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
572 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
573 | "dev": true,
574 | "requires": {
575 | "minimist": "0.0.8"
576 | }
577 | },
578 | "mocha": {
579 | "version": "5.2.0",
580 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
581 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
582 | "dev": true,
583 | "requires": {
584 | "browser-stdout": "1.3.1",
585 | "commander": "2.15.1",
586 | "debug": "3.1.0",
587 | "diff": "3.5.0",
588 | "escape-string-regexp": "1.0.5",
589 | "glob": "7.1.2",
590 | "growl": "1.10.5",
591 | "he": "1.1.1",
592 | "minimatch": "3.0.4",
593 | "mkdirp": "0.5.1",
594 | "supports-color": "5.4.0"
595 | },
596 | "dependencies": {
597 | "commander": {
598 | "version": "2.15.1",
599 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
600 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
601 | "dev": true
602 | },
603 | "glob": {
604 | "version": "7.1.2",
605 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
606 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
607 | "dev": true,
608 | "requires": {
609 | "fs.realpath": "^1.0.0",
610 | "inflight": "^1.0.4",
611 | "inherits": "2",
612 | "minimatch": "^3.0.4",
613 | "once": "^1.3.0",
614 | "path-is-absolute": "^1.0.0"
615 | }
616 | },
617 | "supports-color": {
618 | "version": "5.4.0",
619 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
620 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
621 | "dev": true,
622 | "requires": {
623 | "has-flag": "^3.0.0"
624 | }
625 | }
626 | }
627 | },
628 | "ms": {
629 | "version": "2.0.0",
630 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
631 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
632 | "dev": true
633 | },
634 | "oauth-sign": {
635 | "version": "0.9.0",
636 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
637 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
638 | "dev": true
639 | },
640 | "once": {
641 | "version": "1.4.0",
642 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
643 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
644 | "dev": true,
645 | "requires": {
646 | "wrappy": "1"
647 | }
648 | },
649 | "path-is-absolute": {
650 | "version": "1.0.1",
651 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
652 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
653 | "dev": true
654 | },
655 | "path-parse": {
656 | "version": "1.0.6",
657 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
658 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
659 | "dev": true
660 | },
661 | "performance-now": {
662 | "version": "2.1.0",
663 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
664 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
665 | "dev": true
666 | },
667 | "psl": {
668 | "version": "1.3.0",
669 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
670 | "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
671 | "dev": true
672 | },
673 | "punycode": {
674 | "version": "2.1.1",
675 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
676 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
677 | "dev": true
678 | },
679 | "qs": {
680 | "version": "6.5.2",
681 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
682 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
683 | "dev": true
684 | },
685 | "querystringify": {
686 | "version": "2.1.1",
687 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
688 | "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
689 | "dev": true
690 | },
691 | "request": {
692 | "version": "2.88.0",
693 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
694 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
695 | "dev": true,
696 | "requires": {
697 | "aws-sign2": "~0.7.0",
698 | "aws4": "^1.8.0",
699 | "caseless": "~0.12.0",
700 | "combined-stream": "~1.0.6",
701 | "extend": "~3.0.2",
702 | "forever-agent": "~0.6.1",
703 | "form-data": "~2.3.2",
704 | "har-validator": "~5.1.0",
705 | "http-signature": "~1.2.0",
706 | "is-typedarray": "~1.0.0",
707 | "isstream": "~0.1.2",
708 | "json-stringify-safe": "~5.0.1",
709 | "mime-types": "~2.1.19",
710 | "oauth-sign": "~0.9.0",
711 | "performance-now": "^2.1.0",
712 | "qs": "~6.5.2",
713 | "safe-buffer": "^5.1.2",
714 | "tough-cookie": "~2.4.3",
715 | "tunnel-agent": "^0.6.0",
716 | "uuid": "^3.3.2"
717 | }
718 | },
719 | "requires-port": {
720 | "version": "1.0.0",
721 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
722 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
723 | "dev": true
724 | },
725 | "resolve": {
726 | "version": "1.8.1",
727 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
728 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
729 | "dev": true,
730 | "requires": {
731 | "path-parse": "^1.0.5"
732 | }
733 | },
734 | "safe-buffer": {
735 | "version": "5.2.0",
736 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
737 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
738 | "dev": true
739 | },
740 | "safer-buffer": {
741 | "version": "2.1.2",
742 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
743 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
744 | "dev": true
745 | },
746 | "semver": {
747 | "version": "5.6.0",
748 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
749 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
750 | "dev": true
751 | },
752 | "source-map": {
753 | "version": "0.6.1",
754 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
755 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
756 | "dev": true
757 | },
758 | "source-map-support": {
759 | "version": "0.5.13",
760 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
761 | "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
762 | "dev": true,
763 | "requires": {
764 | "buffer-from": "^1.0.0",
765 | "source-map": "^0.6.0"
766 | }
767 | },
768 | "sprintf-js": {
769 | "version": "1.0.3",
770 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
771 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
772 | "dev": true
773 | },
774 | "sshpk": {
775 | "version": "1.16.1",
776 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
777 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
778 | "dev": true,
779 | "requires": {
780 | "asn1": "~0.2.3",
781 | "assert-plus": "^1.0.0",
782 | "bcrypt-pbkdf": "^1.0.0",
783 | "dashdash": "^1.12.0",
784 | "ecc-jsbn": "~0.1.1",
785 | "getpass": "^0.1.1",
786 | "jsbn": "~0.1.0",
787 | "safer-buffer": "^2.0.2",
788 | "tweetnacl": "~0.14.0"
789 | }
790 | },
791 | "strip-ansi": {
792 | "version": "3.0.1",
793 | "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
794 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
795 | "dev": true,
796 | "requires": {
797 | "ansi-regex": "^2.0.0"
798 | }
799 | },
800 | "supports-color": {
801 | "version": "2.0.0",
802 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
803 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
804 | "dev": true
805 | },
806 | "tough-cookie": {
807 | "version": "2.4.3",
808 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
809 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
810 | "dev": true,
811 | "requires": {
812 | "psl": "^1.1.24",
813 | "punycode": "^1.4.1"
814 | },
815 | "dependencies": {
816 | "punycode": {
817 | "version": "1.4.1",
818 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
819 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
820 | "dev": true
821 | }
822 | }
823 | },
824 | "tslib": {
825 | "version": "1.9.3",
826 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
827 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
828 | "dev": true
829 | },
830 | "tslint": {
831 | "version": "5.11.0",
832 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz",
833 | "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=",
834 | "dev": true,
835 | "requires": {
836 | "babel-code-frame": "^6.22.0",
837 | "builtin-modules": "^1.1.1",
838 | "chalk": "^2.3.0",
839 | "commander": "^2.12.1",
840 | "diff": "^3.2.0",
841 | "glob": "^7.1.1",
842 | "js-yaml": "^3.7.0",
843 | "minimatch": "^3.0.4",
844 | "resolve": "^1.3.2",
845 | "semver": "^5.3.0",
846 | "tslib": "^1.8.0",
847 | "tsutils": "^2.27.2"
848 | }
849 | },
850 | "tsutils": {
851 | "version": "2.29.0",
852 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
853 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
854 | "dev": true,
855 | "requires": {
856 | "tslib": "^1.8.1"
857 | }
858 | },
859 | "tunnel-agent": {
860 | "version": "0.6.0",
861 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
862 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
863 | "dev": true,
864 | "requires": {
865 | "safe-buffer": "^5.0.1"
866 | }
867 | },
868 | "tweetnacl": {
869 | "version": "0.14.5",
870 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
871 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
872 | "dev": true
873 | },
874 | "typescript": {
875 | "version": "2.9.2",
876 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
877 | "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
878 | "dev": true
879 | },
880 | "uri-js": {
881 | "version": "4.2.2",
882 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
883 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
884 | "dev": true,
885 | "requires": {
886 | "punycode": "^2.1.0"
887 | }
888 | },
889 | "url-parse": {
890 | "version": "1.4.7",
891 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
892 | "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
893 | "dev": true,
894 | "requires": {
895 | "querystringify": "^2.1.1",
896 | "requires-port": "^1.0.0"
897 | }
898 | },
899 | "uuid": {
900 | "version": "3.3.2",
901 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
902 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
903 | "dev": true
904 | },
905 | "verror": {
906 | "version": "1.10.0",
907 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
908 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
909 | "dev": true,
910 | "requires": {
911 | "assert-plus": "^1.0.0",
912 | "core-util-is": "1.0.2",
913 | "extsprintf": "^1.2.0"
914 | }
915 | },
916 | "vscode": {
917 | "version": "1.1.36",
918 | "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.36.tgz",
919 | "integrity": "sha512-cGFh9jmGLcTapCpPCKvn8aG/j9zVQ+0x5hzYJq5h5YyUXVGa1iamOaB2M2PZXoumQPES4qeAP1FwkI0b6tL4bQ==",
920 | "dev": true,
921 | "requires": {
922 | "glob": "^7.1.2",
923 | "mocha": "^5.2.0",
924 | "request": "^2.88.0",
925 | "semver": "^5.4.1",
926 | "source-map-support": "^0.5.0",
927 | "url-parse": "^1.4.4",
928 | "vscode-test": "^0.4.1"
929 | }
930 | },
931 | "vscode-test": {
932 | "version": "0.4.3",
933 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz",
934 | "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==",
935 | "dev": true,
936 | "requires": {
937 | "http-proxy-agent": "^2.1.0",
938 | "https-proxy-agent": "^2.2.1"
939 | }
940 | },
941 | "wrappy": {
942 | "version": "1.0.2",
943 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
944 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
945 | "dev": true
946 | }
947 | }
948 | }
949 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "code-groovy",
3 | "displayName": "code-groovy",
4 | "description": "Groovy support for VSCode",
5 | "version": "0.1.1",
6 | "publisher": "marlon407",
7 | "engines": {
8 | "vscode": "^1.28.0"
9 | },
10 | "categories": [
11 | "Programming Languages"
12 | ],
13 | "keywords": [
14 | "groovy",
15 | "grails",
16 | "micronaut",
17 | "search code"
18 | ],
19 | "icon": "groovy.png",
20 | "activationEvents": [
21 | "onCommand:cgroovy.organizeImports",
22 | "onCommand:cgroovy.organizeDependences",
23 | "onLanguage:groovy",
24 | "onLanguage:gsp"
25 | ],
26 | "repository": {
27 | "type": "git",
28 | "url": "https://github.com/marlon407/code-groovy"
29 | },
30 | "main": "./out/extension",
31 | "contributes": {
32 | "commands": [
33 | {
34 | "command": "cgroovy.organizeImports",
35 | "title": "Organize imports"
36 | },
37 | {
38 | "command": "cgroovy.organizeDependences",
39 | "title": "Organize dependences"
40 | }
41 | ],
42 | "keybindings": [
43 | {
44 | "command": "cgroovy.organizeImports",
45 | "key": "ctrl+shift+o",
46 | "mac": "cmd+shift+o",
47 | "when": "editorLangId =~ /groovy|gsp/"
48 | },
49 | {
50 | "command": "cgroovy.organizeDependences",
51 | "key": "ctrl+shift+d",
52 | "mac": "cmd+shift+d",
53 | "when": "editorLangId =~ /groovy|gsp/"
54 | }
55 | ],
56 | "snippets": [
57 | {
58 | "language": "groovy",
59 | "path": "./snippets/groovy.json"
60 | },
61 | {
62 | "language": "gsp",
63 | "path": "./snippets/gsp.json"
64 | }
65 | ],
66 | "languages": [
67 | {
68 | "id": "gsp",
69 | "aliases": [
70 | "Groovy Server Pages"
71 | ],
72 | "extensions": [
73 | ".gsp"
74 | ],
75 | "configuration": "./language-configuration-gsp.json"
76 | }
77 | ],
78 | "grammars": [
79 | {
80 | "language": "gsp",
81 | "scopeName": "text.html.gsp",
82 | "path": "./syntaxes/gsp.tmLanguage",
83 | "embeddedLanguages": {
84 | "source.css": "css",
85 | "source.js": "javascript",
86 | "source.groovy": "groovy"
87 | }
88 | }
89 | ]
90 | },
91 | "scripts": {
92 | "vscode:prepublish": "npm run compile",
93 | "compile": "tsc -p ./",
94 | "watch": "tsc -watch -p ./",
95 | "postinstall": "node ./node_modules/vscode/bin/install",
96 | "test": "npm run compile && node ./node_modules/vscode/bin/test"
97 | },
98 | "devDependencies": {
99 | "@types/mocha": "^2.2.42",
100 | "@types/node": "^8.10.25",
101 | "tslint": "^5.8.0",
102 | "typescript": "^2.6.1",
103 | "vscode": "^1.1.36"
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/snippets/groovy.json:
--------------------------------------------------------------------------------
1 | {
2 | "newObject": {
3 | "prefix": "new",
4 | "body": [
5 | "${1:Object} ${2:foo} = new ${1:Object}();"
6 | ],
7 | "description": "Create new Object"
8 | },
9 | "domainClass": {
10 | "prefix": "class",
11 | "body": [
12 | "package ${1}",
13 | "",
14 | "class ${2} ${3:extends BaseEntity} {",
15 | "",
16 | "\tstatic constraints = {",
17 | "\t",
18 | "\t}",
19 | "",
20 | "\t static namedQueries = {",
21 | "\t\tquery { search ->",
22 | "\t\t\tif (!Boolean.valueOf(search.includeDeleted)) {",
23 | "\t\t\t\teq('deleted', false)",
24 | "\t\t\t}",
25 | "",
26 | "\t\t\tif (search.containsKey('id')) {",
27 | "\t\t\t\teq('id', search.id)",
28 | "\t\t\t}",
29 | "\t\t}",
30 | "\t}",
31 | "}"
32 | ],
33 | "description": "New domain class"
34 | },
35 | "controllerClass": {
36 | "prefix": "class",
37 | "body": [
38 | "package ${1}",
39 | "",
40 | "import grails.converters.JSON",
41 | "import grails.plugin.springsecurity.annotation.Secured",
42 | "import grails.plugin.springsecurity.SpringSecurityUtils",
43 | "",
44 | "${2:@Secured(['ROLE_USER'])}",
45 | "class ${3}Controller ${4:extends BaseController} {",
46 | "",
47 | "\tdef index() {",
48 | "\t",
49 | "\t}",
50 | "",
51 | "\tdef show() {",
52 | "\t",
53 | "\t}",
54 | "",
55 | "\tdef save() {",
56 | "\t",
57 | "\t}",
58 | "",
59 | "\tdef delete() {",
60 | "\t",
61 | "\t}",
62 | "",
63 | "}"
64 | ],
65 | "description": "New domain class"
66 | },
67 | "serviceClass": {
68 | "prefix": "class",
69 | "body": [
70 | "package ${1}",
71 | "",
72 | "import grails.transaction.Transactional",
73 | "",
74 | "${2:@Transactional}",
75 | "class ${3}Service {",
76 | "\t",
77 | "}"
78 | ],
79 | "description": "New service class"
80 | }
81 | }
--------------------------------------------------------------------------------
/snippets/gsp.json:
--------------------------------------------------------------------------------
1 | {
2 | "if": {
3 | "prefix": ["g.if", "if"],
4 | "body": [
5 | "",
6 | " $2",
7 | ""
8 | ],
9 | "description": "if .. end"
10 | },
11 | "else": {
12 | "prefix": ["g.else", "else"],
13 | "body": [
14 | "",
15 | " $2",
16 | ""
17 | ],
18 | "description": "else"
19 | },
20 | "elsif": {
21 | "prefix": ["g.elseif", "elseif"],
22 | "body": [
23 | "",
24 | " $2",
25 | ""
26 | ],
27 | "description": "elsif"
28 | },
29 |
30 | "each": {
31 | "prefix": ["g.each", "each"],
32 | "body": [
33 | "",
34 | " $3",
35 | ""
36 | ],
37 | "description": "each do"
38 | },
39 | "render": {
40 | "prefix": ["g.render", "render"],
41 | "body": [
42 | ""
43 | ],
44 | "description": "render a template"
45 | },
46 | "import": {
47 | "prefix": ["g.import", "import"],
48 | "body": [
49 | "<%@ page import=\"$1\" %>"
50 | ],
51 | "description": "import"
52 | },
53 | "service": {
54 | "prefix": ["g.service", "service"],
55 | "body": [
56 | ""
57 | ],
58 | "description": "inject a service"
59 | },
60 | "set": {
61 | "prefix": ["g.set", "set"],
62 | "body": [
63 | ""
64 | ],
65 | "description": "set a var"
66 | }
67 | }
--------------------------------------------------------------------------------
/src/extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import * as vscode from 'vscode';
4 | import * as sortLines from './sort_lines';
5 | import GroovyDocumentSymbolProvider from './groovy_document_symbol_provider';
6 |
7 | export function activate(context: vscode.ExtensionContext) {
8 |
9 | const commands = [
10 | vscode.commands.registerCommand('cgroovy.organizeImports', sortLines.sortImports),
11 | vscode.commands.registerCommand('cgroovy.organizeDependences', sortLines.sortDependeces),
12 | ];
13 |
14 | const languages = [
15 | vscode.languages.registerDocumentSymbolProvider( { language: 'groovy', scheme: 'file' }, new GroovyDocumentSymbolProvider())
16 | ];
17 |
18 | commands.forEach(command => context.subscriptions.push(command));
19 | languages.forEach(language => context.subscriptions.push(language));
20 |
21 | }
22 |
23 | export function deactivate() {
24 | }
25 |
--------------------------------------------------------------------------------
/src/file_parser.ts:
--------------------------------------------------------------------------------
1 | // Example
2 | // {
3 | // name: "some_method",
4 | // type: "def",
5 | // start_line: 2,
6 | // end_line: 5
7 | // }
8 |
9 | // class CodeBlock {
10 | // name: String
11 | // type: String
12 | // start_line: Number
13 | // end_line: Number
14 |
15 | // isComplete() {
16 | // return this.start_line && this.end_line
17 | // }
18 | // }
19 |
20 | export default class FileParser {
21 | fileText: any;
22 | lines :any;
23 | first_line :any;
24 | constructor(fileText: any) {
25 | this.fileText = fileText
26 | this.lines = this.fileText.split("\n")
27 | }
28 | symbol_informations() {
29 | var blocks: any = [];
30 | this.lines.forEach( (line: any, index: any) =>{
31 | let lineParse = new LineParse(line);
32 | if (lineParse.isBlock()){
33 | let blockType = lineParse.getBlockType();
34 | var block = {
35 | name: lineParse.getBlockName(blockType),
36 | start_line: index,
37 | type: blockType,
38 | end_line: index
39 | }
40 | blocks = [...blocks, block]
41 | }
42 | });
43 | return this.getPermitedBlocks(blocks)
44 | }
45 |
46 | getPermitedBlocks(blocks: any) {
47 | return blocks.filter((block: any) => (
48 | block.end_line && _.includes(["def", "class"], block.type)
49 | ))
50 | }
51 |
52 | dependences() {
53 | var blocks: any = [];
54 | this.lines.forEach( (line: any, index: any) =>{
55 | let lineParse = new LineParse(line);
56 | if (lineParse.isDependenceInjection()){
57 | if (!this.first_line) this.first_line = index;
58 | var block = {
59 | line: line,
60 | start_line: index,
61 | }
62 | blocks = [...blocks, block]
63 | }
64 | });
65 | return blocks;
66 | }
67 | }
68 |
69 | // const blockTypes = ["class", "def"]
70 | const functionRegEx = /(def|public|private|protected|boolean|double|string|int|long|integer|void)+\s+.*\s*[a-z]*\(.*\)*\{/i;
71 | const dependeceRegEx = /def+\s+.*Service/i;
72 | class LineParse{
73 | line: any;
74 | constructor(line: any) { this.line = line }
75 | isAClassBlock() { return /class /.test(this.line) }
76 | isAFunctionBlock() {
77 | return this.line.match(functionRegEx);
78 | }
79 | isDependenceInjection() {
80 | return this.line.match(dependeceRegEx);
81 | }
82 | isBlock() {
83 | return (
84 | this.isAClassBlock() ||
85 | this.isAFunctionBlock()
86 | )
87 | }
88 | getBlockType() {
89 | if (this.isAClassBlock()) { return "class" }
90 | if (this.isAFunctionBlock()) { return "def" }
91 | return undefined
92 | }
93 |
94 | getBlockName(blockType: any) {
95 | if (blockType == "class") {
96 | return this.line.replace("class", "").replace("{", "").trim()
97 | }
98 | if (blockType == "def") {
99 | let name = this.line.split('(')[0].replace(/(def|public|private|protected)/i, "").trim();
100 | return name;
101 | }
102 | return undefined
103 | }
104 | }
105 | const _ = {
106 | includes: (array: any, value: any) => (array.indexOf(value) != -1)
107 | }
--------------------------------------------------------------------------------
/src/groovy_document_symbol_provider.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from 'vscode';
2 |
3 | import FileParser from './file_parser'
4 |
5 | export default class GoDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
6 | public provideDocumentSymbols(
7 | document: vscode.TextDocument, token: vscode.CancellationToken):
8 | Thenable {
9 | let fileText = document.getText()
10 | let symbol_informations = new FileParser(fileText).symbol_informations()
11 | return symbol_informations.map((symbol_information: any) => {
12 | const { name, type, start_line, end_line} = symbol_information
13 | const symbolKinds: any = {
14 | "class": vscode.SymbolKind.Class,
15 | "def": vscode.SymbolKind.Function,
16 | "public": vscode.SymbolKind.Function,
17 | "private": vscode.SymbolKind.Function,
18 | "protected": vscode.SymbolKind.Function
19 | }
20 | var rage = new vscode.Range( new vscode.Position(start_line, 0), new vscode.Position(end_line, 0) );
21 | return new vscode.SymbolInformation(name, symbolKinds[type], rage)
22 | })
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/sort_lines.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from 'vscode';
2 |
3 | import FileParser from './file_parser';
4 |
5 | export const sortDependeces = () => {
6 | let activeEditor = vscode.window.activeTextEditor;
7 | if (!activeEditor || !activeEditor.document || activeEditor.document.languageId !== 'groovy') return;
8 |
9 | let fileText = activeEditor.document.getText()
10 | activeEditor.edit(editBuilder => {
11 | let deps = new FileParser(fileText).dependences()
12 | const lines: string[] = [];
13 | deps.map((dep: any) => {
14 | if (!activeEditor) return;
15 | const range = new vscode.Range(dep.start_line, 0, dep.start_line + 1, 0);
16 | editBuilder.delete(range);
17 | lines.push(dep.line);
18 | });
19 |
20 | lines.sort();
21 |
22 | removeBlanks(lines);
23 | removeDuplicates(lines);
24 | lines.push("");
25 |
26 | const position = new vscode.Position(deps[0].start_line, 0);
27 | editBuilder.insert(position, lines.join('\n'));
28 | });
29 | }
30 |
31 | export const sortImports = () => {
32 | let activeEditor = vscode.window.activeTextEditor;
33 | if (!activeEditor || !activeEditor.document || activeEditor.document.languageId !== 'groovy') return;
34 |
35 | const importCondition = (text: string) => { return text.startsWith("import") };
36 | return sortLines(activeEditor, importCondition, true);
37 | }
38 |
39 | function sortLines(textEditor: vscode.TextEditor, condition: Function, addBlanksLines: boolean) {
40 | const lines: string[] = [];
41 | let lastImportLine : any;
42 | let firstImportLine : any;
43 | for (let i = 0; i <= textEditor.document.lineCount - 1; i++) {
44 | let text = textEditor.document.lineAt(i).text;
45 | if (condition(text.replace(/^\s\s*/, ''))) {
46 | if (firstImportLine == undefined) firstImportLine = i
47 | lastImportLine = i;
48 | lines.push(text);
49 | }
50 | }
51 |
52 | if (lines.length == 0) return;
53 |
54 | lines.sort();
55 |
56 | removeBlanks(lines);
57 | removeDuplicates(lines);
58 |
59 | if (addBlanksLines) addBlanks(lines);
60 |
61 | return textEditor.edit(editBuilder => {
62 | const range = new vscode.Range(firstImportLine, 0, lastImportLine, textEditor.document.lineAt(lastImportLine).text.length);
63 | editBuilder.replace(range, lines.join('\n'));
64 | });
65 | }
66 |
67 | function removeBlanks(lines: string[]) {
68 | for (let i = 0; i < lines.length; ++i) {
69 | if (lines[i].trim() === '') {
70 | lines.splice(i, 1);
71 | i--;
72 | }
73 | }
74 | }
75 |
76 | function removeDuplicates(lines: string[]) {
77 | for (let i = 1; i < lines.length; ++i) {
78 | if (lines[i - 1] === lines[i]) {
79 | lines.splice(i, 1);
80 | i--;
81 | }
82 | }
83 | }
84 |
85 | function addBlanks(lines: string[]) {
86 | for (let i = 1; i < lines.length; ++i) {
87 | let lastPackage = lines[i-1].split(" ")[1].split(".");
88 | let currentPackage = lines[i].split(" ")[1].split(".");
89 |
90 | if (currentPackage[0] == lastPackage[0]) {
91 | continue;
92 | }
93 | lines.splice(i, 0, "");
94 | i++
95 | }
96 | }
--------------------------------------------------------------------------------
/src/test/extension.test.ts:
--------------------------------------------------------------------------------
1 | //
2 | // Note: This example test is leveraging the Mocha test framework.
3 | // Please refer to their documentation on https://mochajs.org/ for help.
4 | //
5 |
6 | // The module 'assert' provides assertion methods from node
7 | import * as assert from 'assert';
8 |
9 | // You can import and use all API from the 'vscode' module
10 | // as well as import your extension to test it
11 | // import * as vscode from 'vscode';
12 | // import * as myExtension from '../extension';
13 |
14 | // Defines a Mocha test suite to group tests of similar kind together
15 | suite("Extension Tests", function () {
16 |
17 | // Defines a Mocha unit test
18 | test("Something 1", function() {
19 | assert.equal(-1, [1, 2, 3].indexOf(5));
20 | assert.equal(-1, [1, 2, 3].indexOf(0));
21 | });
22 | });
--------------------------------------------------------------------------------
/src/test/index.ts:
--------------------------------------------------------------------------------
1 | //
2 | // PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING
3 | //
4 | // This file is providing the test runner to use when running extension tests.
5 | // By default the test runner in use is Mocha based.
6 | //
7 | // You can provide your own test runner if you want to override it by exporting
8 | // a function run(testRoot: string, clb: (error:Error) => void) that the extension
9 | // host can call to run the tests. The test runner is expected to use console.log
10 | // to report the results back to the caller. When the tests are finished, return
11 | // a possible error to the callback or null if none.
12 |
13 | import * as testRunner from 'vscode/lib/testrunner';
14 |
15 | // You can directly control Mocha options by uncommenting the following lines
16 | // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info
17 | testRunner.configure({
18 | ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.)
19 | useColors: true // colored output from test results
20 | });
21 |
22 | module.exports = testRunner;
--------------------------------------------------------------------------------
/syntaxes/gsp.cson.json:
--------------------------------------------------------------------------------
1 | {
2 | "information_for_contributors": [
3 | "This file has been converted from https://github.com/mathifonseca/atom-grails/blob/master/grammars/gsp.cson",
4 | "If you want to provide a fix or improvement, please create a pull request against the original repository.",
5 | "Once accepted there, we are happy to receive an update request."
6 | ],
7 | "version": "",
8 | "name": "Grails Server Page",
9 | "scopeName": "text.html.gsp",
10 | "fileTypes": [
11 | "gsp"
12 | ],
13 | "injections": {
14 | "text.html.gsp - (meta.embedded.block.gsp | meta.embedded.line.gsp | meta.tag | comment), meta.tag string.quoted": {
15 | "patterns": [
16 | {
17 | "begin": "<%--",
18 | "beginCaptures": {
19 | "0": {
20 | "name": "punctuation.definition.comment.gsp"
21 | }
22 | },
23 | "endCaptures": "--%>",
24 | "name": "comment.block.gsp"
25 | },
26 | {
27 | "begin": "%{--",
28 | "beginCaptures": {
29 | "0": {
30 | "name": "punctuation.definition.comment.gsp"
31 | }
32 | },
33 | "endCaptures": "--}%",
34 | "name": "alternative.comment.block.gsp"
35 | },
36 | {
37 | "begin": "<%+(?!>)=?",
38 | "beginCaptures": {
39 | "0": {
40 | "name": "punctuation.section.embedded.begin.groovy"
41 | }
42 | },
43 | "end": "%>",
44 | "endCaptures": {
45 | "0": {
46 | "name": "punctuation.section.embedded.end.groovy"
47 | }
48 | },
49 | "name": "source.groovy",
50 | "patterns": [
51 | {
52 | "include": "source.groovy"
53 | }
54 | ]
55 | },
56 | {
57 | "include": "#embedded-groovy"
58 | }
59 | ]
60 | }
61 | },
62 | "patterns": [
63 | {
64 | "include": "text.html.basic"
65 | }
66 | ],
67 | "repository": {
68 | "embedded-groovy": {
69 | "patterns": [
70 | {
71 | "begin": "\\$\\{",
72 | "beginCaptures": {
73 | "0": {
74 | "name": "punctuation.section.embedded.groovy"
75 | }
76 | },
77 | "end": "\\}",
78 | "name": "source.groovy.embedded.html.grails",
79 | "patterns": [
80 | {
81 | "include": "source.groovy"
82 | }
83 | ]
84 | },
85 | {
86 | "begin": "<%@",
87 | "beginCaptures": {
88 | "0": {
89 | "name": "punctuation.section.embedded.groovy"
90 | }
91 | },
92 | "end": "%>",
93 | "name": "source.groovy.embedded.html.grails",
94 | "patterns": [
95 | {
96 | "include": "source.groovy"
97 | }
98 | ]
99 | }
100 | ]
101 | },
102 | "string-double-quoted": {
103 | "patterns": [
104 | {
105 | "begin": "\"",
106 | "beginCaptures": {
107 | "0": {
108 | "name": "punctuation.definition.string.begin.html.grails"
109 | }
110 | },
111 | "end": "\"",
112 | "endCaptures": {
113 | "0": {
114 | "name": "punctuation.definition.string.end.html.grails"
115 | }
116 | },
117 | "name": "string.quoted.double.html.grails",
118 | "patterns": [
119 | {
120 | "include": "#embedded-groovy"
121 | }
122 | ]
123 | }
124 | ]
125 | }
126 | }
127 | }
--------------------------------------------------------------------------------
/syntaxes/gsp.tmLanguage:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | fileTypes
6 |
7 | gsp
8 | tag
9 |
10 | injections
11 |
12 | text.html.gsp - (meta.embedded.block.gsp | meta.embedded.line.gsp | meta.tag | comment), meta.tag string.quoted
13 |
14 | patterns
15 |
16 |
17 | include
18 | #comment
19 |
20 |
21 | include
22 | #declaration
23 |
24 |
25 | include
26 | #expression
27 |
28 |
29 | include
30 | #el_expression
31 |
32 |
33 | include
34 | #tags
35 |
36 |
37 | begin
38 | (^\s*)(?=<%(?=\s))
39 | beginCaptures
40 |
41 | 0
42 |
43 | name
44 | punctuation.whitespace.embedded.leading.erb
45 |
46 |
47 | end
48 | (?!\G)(\s*$\n)?
49 | endCaptures
50 |
51 | 0
52 |
53 | name
54 | punctuation.whitespace.embedded.trailing.erb
55 |
56 |
57 | patterns
58 |
59 |
60 | include
61 | #scriptlet
62 |
63 |
64 |
65 |
66 | include
67 | #scriptlet
68 |
69 |
70 |
71 |
72 | keyEquivalent
73 | ^~J
74 | name
75 | JavaServer Pages
76 | patterns
77 |
78 |
79 | include
80 | #xml_tags
81 |
82 |
83 | include
84 | text.html.basic
85 |
86 |
87 | repository
88 |
89 | comment
90 |
91 | begin
92 | <%--
93 | captures
94 |
95 | 0
96 |
97 | name
98 | punctuation.definition.comment.gsp
99 |
100 |
101 | end
102 | --%>
103 | name
104 | comment.block.gsp
105 |
106 | declaration
107 |
108 | begin
109 | <%!
110 | beginCaptures
111 |
112 | 0
113 |
114 | name
115 | punctuation.section.embedded.begin.gsp
116 |
117 |
118 | contentName
119 | source.java
120 | end
121 | (%)>
122 | endCaptures
123 |
124 | 0
125 |
126 | name
127 | punctuation.section.embedded.end.gsp
128 |
129 | 1
130 |
131 | name
132 | source.java
133 |
134 |
135 | name
136 | meta.embedded.line.declaration.gsp
137 | patterns
138 |
139 |
140 | include
141 | source.java
142 |
143 |
144 |
145 | el_expression
146 |
147 | begin
148 | \$\{
149 | beginCaptures
150 |
151 | 0
152 |
153 | name
154 | punctuation.section.embedded.begin.gsp
155 |
156 |
157 | contentName
158 | source.java
159 | end
160 | (\})
161 | endCaptures
162 |
163 | 0
164 |
165 | name
166 | punctuation.section.embedded.end.gsp
167 |
168 | 1
169 |
170 | name
171 | source.java
172 |
173 |
174 | name
175 | meta.embedded.line.el_expression.gsp
176 | patterns
177 |
178 |
179 | include
180 | source.java
181 |
182 |
183 |
184 | expression
185 |
186 | begin
187 | <%=
188 | beginCaptures
189 |
190 | 0
191 |
192 | name
193 | punctuation.section.embedded.begin.gsp
194 |
195 |
196 | contentName
197 | source.java
198 | end
199 | (%)>
200 | endCaptures
201 |
202 | 0
203 |
204 | name
205 | punctuation.section.embedded.end.gsp
206 |
207 | 1
208 |
209 | name
210 | source.java
211 |
212 |
213 | name
214 | meta.embedded.line.expression.gsp
215 | patterns
216 |
217 |
218 | include
219 | source.java
220 |
221 |
222 |
223 | scriptlet
224 |
225 | begin
226 | <%
227 | beginCaptures
228 |
229 | 0
230 |
231 | name
232 | punctuation.section.embedded.begin.gsp
233 |
234 |
235 | contentName
236 | source.java
237 | end
238 | (%)>
239 | endCaptures
240 |
241 | 0
242 |
243 | name
244 | punctuation.section.embedded.end.gsp
245 |
246 | 1
247 |
248 | name
249 | source.java
250 |
251 |
252 | name
253 | meta.embedded.block.scriptlet.gsp
254 | patterns
255 |
256 |
257 | match
258 | \{
259 | name
260 | punctuation.section.scope.begin.java
261 |
262 |
263 | match
264 | \}
265 | name
266 | punctuation.section.scope.end.java
267 |
268 |
269 | include
270 | source.java
271 |
272 |
273 |
274 | tags
275 |
276 | begin
277 | (<%@)\s*(?=(attribute|include|page|tag|taglib|variable)\s)
278 | beginCaptures
279 |
280 | 1
281 |
282 | name
283 | punctuation.definition.tag.begin.gsp
284 |
285 |
286 | end
287 | %>
288 | endCaptures
289 |
290 | 0
291 |
292 | name
293 | punctuation.definition.tag.end.gsp
294 |
295 |
296 | name
297 | meta.tag.template.include.gsp
298 | patterns
299 |
300 |
301 | begin
302 | \G(attribute)(?=\s)
303 | captures
304 |
305 | 1
306 |
307 | name
308 | keyword.control.attribute.gsp
309 |
310 |
311 | end
312 | (?=%>)
313 | patterns
314 |
315 |
316 | captures
317 |
318 | 1
319 |
320 | name
321 | entity.other.attribute-name.gsp
322 |
323 | 2
324 |
325 | name
326 | punctuation.separator.key-value.gsp
327 |
328 | 3
329 |
330 | name
331 | string.quoted.double.gsp
332 |
333 | 4
334 |
335 | name
336 | punctuation.definition.string.begin.gsp
337 |
338 | 5
339 |
340 | name
341 | punctuation.definition.string.end.gsp
342 |
343 |
344 | match
345 | (name|required|fragment|rtexprvalue|type|description)(=)((")[^"]*("))
346 |
347 |
348 |
349 |
350 | begin
351 | \G(include)(?=\s)
352 | captures
353 |
354 | 1
355 |
356 | name
357 | keyword.control.include.gsp
358 |
359 |
360 | end
361 | (?=%>)
362 | patterns
363 |
364 |
365 | captures
366 |
367 | 1
368 |
369 | name
370 | entity.other.attribute-name.gsp
371 |
372 | 2
373 |
374 | name
375 | punctuation.separator.key-value.gsp
376 |
377 | 3
378 |
379 | name
380 | string.quoted.double.gsp
381 |
382 | 4
383 |
384 | name
385 | punctuation.definition.string.begin.gsp
386 |
387 | 5
388 |
389 | name
390 | punctuation.definition.string.end.gsp
391 |
392 |
393 | match
394 | (file)(=)((")[^"]*("))
395 |
396 |
397 |
398 |
399 | begin
400 | \G(page)(?=\s)
401 | captures
402 |
403 | 1
404 |
405 | name
406 | keyword.control.page.gsp
407 |
408 |
409 | end
410 | (?=%>)
411 | patterns
412 |
413 |
414 | captures
415 |
416 | 1
417 |
418 | name
419 | entity.other.attribute-name.gsp
420 |
421 | 2
422 |
423 | name
424 | punctuation.separator.key-value.gsp
425 |
426 | 3
427 |
428 | name
429 | string.quoted.double.gsp
430 |
431 | 4
432 |
433 | name
434 | punctuation.definition.string.begin.gsp
435 |
436 | 5
437 |
438 | name
439 | punctuation.definition.string.end.gsp
440 |
441 |
442 | match
443 | (language|extends|import|session|buffer|autoFlush|isThreadSafe|info|errorPage|isErrorPage|contentType|pageEncoding|isElIgnored)(=)((")[^"]*("))
444 |
445 |
446 |
447 |
448 | begin
449 | \G(tag)(?=\s)
450 | captures
451 |
452 | 1
453 |
454 | name
455 | keyword.control.tag.gsp
456 |
457 |
458 | end
459 | (?=%>)
460 | patterns
461 |
462 |
463 | captures
464 |
465 | 1
466 |
467 | name
468 | entity.other.attribute-name.gsp
469 |
470 | 2
471 |
472 | name
473 | punctuation.separator.key-value.gsp
474 |
475 | 3
476 |
477 | name
478 | string.quoted.double.gsp
479 |
480 | 4
481 |
482 | name
483 | punctuation.definition.string.begin.gsp
484 |
485 | 5
486 |
487 | name
488 | punctuation.definition.string.end.gsp
489 |
490 |
491 | match
492 | (display-name|body-content|dynamic-attributes|small-icon|large-icon|description|example|language|import|pageEncoding|isELIgnored)(=)((")[^"]*("))
493 |
494 |
495 |
496 |
497 | begin
498 | \G(taglib)(?=\s)
499 | captures
500 |
501 | 1
502 |
503 | name
504 | keyword.control.taglib.gsp
505 |
506 |
507 | end
508 | (?=%>)
509 | patterns
510 |
511 |
512 | captures
513 |
514 | 1
515 |
516 | name
517 | entity.other.attribute-name.gsp
518 |
519 | 2
520 |
521 | name
522 | punctuation.separator.key-value.gsp
523 |
524 | 3
525 |
526 | name
527 | string.quoted.double.gsp
528 |
529 | 4
530 |
531 | name
532 | punctuation.definition.string.begin.gsp
533 |
534 | 5
535 |
536 | name
537 | punctuation.definition.string.end.gsp
538 |
539 |
540 | match
541 | (uri|tagdir|prefix)(=)((")[^"]*("))
542 |
543 |
544 |
545 |
546 | begin
547 | \G(variable)(?=\s)
548 | captures
549 |
550 | 1
551 |
552 | name
553 | keyword.control.variable.gsp
554 |
555 |
556 | end
557 | (?=%>)
558 | patterns
559 |
560 |
561 | captures
562 |
563 | 1
564 |
565 | name
566 | entity.other.attribute-name.gsp
567 |
568 | 2
569 |
570 | name
571 | punctuation.separator.key-value.gsp
572 |
573 | 3
574 |
575 | name
576 | string.quoted.double.gsp
577 |
578 | 4
579 |
580 | name
581 | punctuation.definition.string.begin.gsp
582 |
583 | 5
584 |
585 | name
586 | punctuation.definition.string.end.gsp
587 |
588 |
589 | match
590 | (name-given|alias|variable-class|declare|scope|description)(=)((")[^"]*("))
591 |
592 |
593 |
594 |
595 |
596 | xml_tags
597 |
598 | patterns
599 |
600 |
601 | begin
602 | (^\s*)(?=<gsp:(declaration|expression|scriptlet)>)
603 | beginCaptures
604 |
605 | 0
606 |
607 | name
608 | punctuation.whitespace.embedded.leading.erb
609 |
610 |
611 | end
612 | (?!\G)(\s*$\n)?
613 | endCaptures
614 |
615 | 0
616 |
617 | name
618 | punctuation.whitespace.embedded.trailing.erb
619 |
620 |
621 | patterns
622 |
623 |
624 | include
625 | #embedded
626 |
627 |
628 |
629 |
630 | include
631 | #embedded
632 |
633 |
634 | include
635 | #directive
636 |
637 |
638 | include
639 | #actions
640 |
641 |
642 | repository
643 |
644 | actions
645 |
646 | patterns
647 |
648 |
649 | begin
650 | (</?)(gsp:attribute)\b
651 | beginCaptures
652 |
653 | 1
654 |
655 | name
656 | punctuation.definition.tag.begin.gsp
657 |
658 | 2
659 |
660 | name
661 | entity.name.tag.gsp
662 |
663 |
664 | end
665 | >
666 | endCaptures
667 |
668 | 0
669 |
670 | name
671 | punctuation.definition.tag.end.gsp
672 |
673 |
674 | name
675 | meta.tag.template.attribute.gsp
676 | patterns
677 |
678 |
679 | captures
680 |
681 | 1
682 |
683 | name
684 | entity.other.attribute-name.gsp
685 |
686 | 2
687 |
688 | name
689 | punctuation.separator.key-value.gsp
690 |
691 | 3
692 |
693 | name
694 | string.quoted.double.gsp
695 |
696 | 4
697 |
698 | name
699 | punctuation.definition.string.begin.gsp
700 |
701 | 5
702 |
703 | name
704 | punctuation.definition.string.end.gsp
705 |
706 |
707 | match
708 | (name|trim)(=)((")[^"]*("))
709 |
710 |
711 |
712 |
713 | captures
714 |
715 | 1
716 |
717 | name
718 | punctuation.definition.tag.begin.gsp
719 |
720 | 2
721 |
722 | name
723 | entity.name.tag.gsp
724 |
725 | 3
726 |
727 | name
728 | punctuation.definition.tag.end.gsp
729 |
730 |
731 | match
732 | (</?)(gsp:body)(>)
733 | name
734 | meta.tag.template.body.gsp
735 |
736 |
737 | begin
738 | (</?)(gsp:element)\b
739 | beginCaptures
740 |
741 | 1
742 |
743 | name
744 | punctuation.definition.tag.begin.gsp
745 |
746 | 2
747 |
748 | name
749 | entity.name.tag.gsp
750 |
751 |
752 | end
753 | >
754 | endCaptures
755 |
756 | 0
757 |
758 | name
759 | punctuation.definition.tag.end.gsp
760 |
761 |
762 | name
763 | meta.tag.template.element.gsp
764 | patterns
765 |
766 |
767 | captures
768 |
769 | 1
770 |
771 | name
772 | entity.other.attribute-name.gsp
773 |
774 | 2
775 |
776 | name
777 | punctuation.separator.key-value.gsp
778 |
779 | 3
780 |
781 | name
782 | string.quoted.double.gsp
783 |
784 | 4
785 |
786 | name
787 | punctuation.definition.string.begin.gsp
788 |
789 | 5
790 |
791 | name
792 | punctuation.definition.string.end.gsp
793 |
794 |
795 | match
796 | (name)(=)((")[^"]*("))
797 |
798 |
799 |
800 |
801 | begin
802 | (<)(gsp:doBody)\b
803 | beginCaptures
804 |
805 | 1
806 |
807 | name
808 | punctuation.definition.tag.begin.gsp
809 |
810 | 2
811 |
812 | name
813 | entity.name.tag.gsp
814 |
815 |
816 | end
817 | />
818 | endCaptures
819 |
820 | 0
821 |
822 | name
823 | punctuation.definition.tag.end.gsp
824 |
825 |
826 | name
827 | meta.tag.template.dobody.gsp
828 | patterns
829 |
830 |
831 | captures
832 |
833 | 1
834 |
835 | name
836 | entity.other.attribute-name.gsp
837 |
838 | 2
839 |
840 | name
841 | punctuation.separator.key-value.gsp
842 |
843 | 3
844 |
845 | name
846 | string.quoted.double.gsp
847 |
848 | 4
849 |
850 | name
851 | punctuation.definition.string.begin.gsp
852 |
853 | 5
854 |
855 | name
856 | punctuation.definition.string.end.gsp
857 |
858 |
859 | match
860 | (var|varReader|scope)(=)((")[^"]*("))
861 |
862 |
863 |
864 |
865 | begin
866 | (</?)(gsp:forward)\b
867 | beginCaptures
868 |
869 | 1
870 |
871 | name
872 | punctuation.definition.tag.begin.gsp
873 |
874 | 2
875 |
876 | name
877 | entity.name.tag.gsp
878 |
879 |
880 | end
881 | /?>
882 | endCaptures
883 |
884 | 0
885 |
886 | name
887 | punctuation.definition.tag.end.gsp
888 |
889 |
890 | name
891 | meta.tag.template.forward.gsp
892 | patterns
893 |
894 |
895 | captures
896 |
897 | 1
898 |
899 | name
900 | entity.other.attribute-name.gsp
901 |
902 | 2
903 |
904 | name
905 | punctuation.separator.key-value.gsp
906 |
907 | 3
908 |
909 | name
910 | string.quoted.double.gsp
911 |
912 | 4
913 |
914 | name
915 | punctuation.definition.string.begin.gsp
916 |
917 | 5
918 |
919 | name
920 | punctuation.definition.string.end.gsp
921 |
922 |
923 | match
924 | (page)(=)((")[^"]*("))
925 |
926 |
927 |
928 |
929 | begin
930 | (<)(gsp:param)\b
931 | beginCaptures
932 |
933 | 1
934 |
935 | name
936 | punctuation.definition.tag.begin.gsp
937 |
938 | 2
939 |
940 | name
941 | entity.name.tag.gsp
942 |
943 |
944 | end
945 | />
946 | endCaptures
947 |
948 | 0
949 |
950 | name
951 | punctuation.definition.tag.end.gsp
952 |
953 |
954 | name
955 | meta.tag.template.param.gsp
956 | patterns
957 |
958 |
959 | captures
960 |
961 | 1
962 |
963 | name
964 | entity.other.attribute-name.gsp
965 |
966 | 2
967 |
968 | name
969 | punctuation.separator.key-value.gsp
970 |
971 | 3
972 |
973 | name
974 | string.quoted.double.gsp
975 |
976 | 4
977 |
978 | name
979 | punctuation.definition.string.begin.gsp
980 |
981 | 5
982 |
983 | name
984 | punctuation.definition.string.end.gsp
985 |
986 |
987 | match
988 | (name|value)(=)((")[^"]*("))
989 |
990 |
991 |
992 |
993 | begin
994 | (<)(gsp:getProperty)\b
995 | beginCaptures
996 |
997 | 1
998 |
999 | name
1000 | punctuation.definition.tag.begin.gsp
1001 |
1002 | 2
1003 |
1004 | name
1005 | entity.name.tag.gsp
1006 |
1007 |
1008 | end
1009 | />
1010 | endCaptures
1011 |
1012 | 0
1013 |
1014 | name
1015 | punctuation.definition.tag.end.gsp
1016 |
1017 |
1018 | name
1019 | meta.tag.template.getproperty.gsp
1020 | patterns
1021 |
1022 |
1023 | captures
1024 |
1025 | 1
1026 |
1027 | name
1028 | entity.other.attribute-name.gsp
1029 |
1030 | 2
1031 |
1032 | name
1033 | punctuation.separator.key-value.gsp
1034 |
1035 | 3
1036 |
1037 | name
1038 | string.quoted.double.gsp
1039 |
1040 | 4
1041 |
1042 | name
1043 | punctuation.definition.string.begin.gsp
1044 |
1045 | 5
1046 |
1047 | name
1048 | punctuation.definition.string.end.gsp
1049 |
1050 |
1051 | match
1052 | (name|property)(=)((")[^"]*("))
1053 |
1054 |
1055 |
1056 |
1057 | begin
1058 | (</?)(gsp:include)\b
1059 | beginCaptures
1060 |
1061 | 1
1062 |
1063 | name
1064 | punctuation.definition.tag.begin.gsp
1065 |
1066 | 2
1067 |
1068 | name
1069 | entity.name.tag.gsp
1070 |
1071 |
1072 | end
1073 | /?>
1074 | endCaptures
1075 |
1076 | 0
1077 |
1078 | name
1079 | punctuation.definition.tag.end.gsp
1080 |
1081 |
1082 | name
1083 | meta.tag.template.include.gsp
1084 | patterns
1085 |
1086 |
1087 | captures
1088 |
1089 | 1
1090 |
1091 | name
1092 | entity.other.attribute-name.gsp
1093 |
1094 | 2
1095 |
1096 | name
1097 | punctuation.separator.key-value.gsp
1098 |
1099 | 3
1100 |
1101 | name
1102 | string.quoted.double.gsp
1103 |
1104 | 4
1105 |
1106 | name
1107 | punctuation.definition.string.begin.gsp
1108 |
1109 | 5
1110 |
1111 | name
1112 | punctuation.definition.string.end.gsp
1113 |
1114 |
1115 | match
1116 | (page|flush)(=)((")[^"]*("))
1117 |
1118 |
1119 |
1120 |
1121 | begin
1122 | (<)(gsp:invoke)\b
1123 | beginCaptures
1124 |
1125 | 1
1126 |
1127 | name
1128 | punctuation.definition.tag.begin.gsp
1129 |
1130 | 2
1131 |
1132 | name
1133 | entity.name.tag.gsp
1134 |
1135 |
1136 | end
1137 | />
1138 | endCaptures
1139 |
1140 | 0
1141 |
1142 | name
1143 | punctuation.definition.tag.end.gsp
1144 |
1145 |
1146 | name
1147 | meta.tag.template.invoke.gsp
1148 | patterns
1149 |
1150 |
1151 | captures
1152 |
1153 | 1
1154 |
1155 | name
1156 | entity.other.attribute-name.gsp
1157 |
1158 | 2
1159 |
1160 | name
1161 | punctuation.separator.key-value.gsp
1162 |
1163 | 3
1164 |
1165 | name
1166 | string.quoted.double.gsp
1167 |
1168 | 4
1169 |
1170 | name
1171 | punctuation.definition.string.begin.gsp
1172 |
1173 | 5
1174 |
1175 | name
1176 | punctuation.definition.string.end.gsp
1177 |
1178 |
1179 | match
1180 | (fragment|var|varReader|scope)(=)((")[^"]*("))
1181 |
1182 |
1183 |
1184 |
1185 | begin
1186 | (<)(gsp:output)\b
1187 | beginCaptures
1188 |
1189 | 1
1190 |
1191 | name
1192 | punctuation.definition.tag.begin.gsp
1193 |
1194 | 2
1195 |
1196 | name
1197 | entity.name.tag.gsp
1198 |
1199 |
1200 | end
1201 | />
1202 | endCaptures
1203 |
1204 | 0
1205 |
1206 | name
1207 | punctuation.definition.tag.end.gsp
1208 |
1209 |
1210 | name
1211 | meta.tag.template.output.gsp
1212 | patterns
1213 |
1214 |
1215 | captures
1216 |
1217 | 1
1218 |
1219 | name
1220 | entity.other.attribute-name.gsp
1221 |
1222 | 2
1223 |
1224 | name
1225 | punctuation.separator.key-value.gsp
1226 |
1227 | 3
1228 |
1229 | name
1230 | string.quoted.double.gsp
1231 |
1232 | 4
1233 |
1234 | name
1235 | punctuation.definition.string.begin.gsp
1236 |
1237 | 5
1238 |
1239 | name
1240 | punctuation.definition.string.end.gsp
1241 |
1242 |
1243 | match
1244 | (omit-xml-declaration|doctype-root-element|doctype-system|doctype-public)(=)((")[^"]*("))
1245 |
1246 |
1247 |
1248 |
1249 | begin
1250 | (</?)(gsp:plugin)\b
1251 | beginCaptures
1252 |
1253 | 1
1254 |
1255 | name
1256 | punctuation.definition.tag.begin.gsp
1257 |
1258 | 2
1259 |
1260 | name
1261 | entity.name.tag.gsp
1262 |
1263 |
1264 | end
1265 | >
1266 | endCaptures
1267 |
1268 | 0
1269 |
1270 | name
1271 | punctuation.definition.tag.end.gsp
1272 |
1273 |
1274 | name
1275 | meta.tag.template.plugin.gsp
1276 | patterns
1277 |
1278 |
1279 | captures
1280 |
1281 | 1
1282 |
1283 | name
1284 | entity.other.attribute-name.gsp
1285 |
1286 | 2
1287 |
1288 | name
1289 | punctuation.separator.key-value.gsp
1290 |
1291 | 3
1292 |
1293 | name
1294 | string.quoted.double.gsp
1295 |
1296 | 4
1297 |
1298 | name
1299 | punctuation.definition.string.begin.gsp
1300 |
1301 | 5
1302 |
1303 | name
1304 | punctuation.definition.string.end.gsp
1305 |
1306 |
1307 | match
1308 | (type|code|codebase|name|archive|align|height|hspace|jreversion|nspluginurl|iepluginurl)(=)((")[^"]*("))
1309 |
1310 |
1311 |
1312 |
1313 | captures
1314 |
1315 | 1
1316 |
1317 | name
1318 | punctuation.definition.tag.begin.gsp
1319 |
1320 | 2
1321 |
1322 | name
1323 | entity.name.tag.gsp
1324 |
1325 | 3
1326 |
1327 | name
1328 | punctuation.definition.tag.end.gsp
1329 |
1330 |
1331 | end
1332 | >
1333 | match
1334 | (</?)(gsp:fallback)(>)
1335 | name
1336 | meta.tag.template.fallback.gsp
1337 |
1338 |
1339 | begin
1340 | (</?)(gsp:root)\b
1341 | beginCaptures
1342 |
1343 | 1
1344 |
1345 | name
1346 | punctuation.definition.tag.begin.gsp
1347 |
1348 | 2
1349 |
1350 | name
1351 | entity.name.tag.gsp
1352 |
1353 |
1354 | end
1355 | >
1356 | endCaptures
1357 |
1358 | 0
1359 |
1360 | name
1361 | punctuation.definition.tag.end.gsp
1362 |
1363 |
1364 | name
1365 | meta.tag.template.root.gsp
1366 | patterns
1367 |
1368 |
1369 | captures
1370 |
1371 | 1
1372 |
1373 | name
1374 | entity.other.attribute-name.gsp
1375 |
1376 | 2
1377 |
1378 | name
1379 | punctuation.separator.key-value.gsp
1380 |
1381 | 3
1382 |
1383 | name
1384 | string.quoted.double.gsp
1385 |
1386 | 4
1387 |
1388 | name
1389 | punctuation.definition.string.begin.gsp
1390 |
1391 | 5
1392 |
1393 | name
1394 | punctuation.definition.string.end.gsp
1395 |
1396 |
1397 | match
1398 | (xmlns|version|xmlns:taglibPrefix)(=)((")[^"]*("))
1399 |
1400 |
1401 |
1402 |
1403 | begin
1404 | (<)(gsp:setProperty)\b
1405 | beginCaptures
1406 |
1407 | 1
1408 |
1409 | name
1410 | punctuation.definition.tag.begin.gsp
1411 |
1412 | 2
1413 |
1414 | name
1415 | entity.name.tag.gsp
1416 |
1417 |
1418 | end
1419 | />
1420 | endCaptures
1421 |
1422 | 0
1423 |
1424 | name
1425 | punctuation.definition.tag.end.gsp
1426 |
1427 |
1428 | name
1429 | meta.tag.template.setproperty.gsp
1430 | patterns
1431 |
1432 |
1433 | captures
1434 |
1435 | 1
1436 |
1437 | name
1438 | entity.other.attribute-name.gsp
1439 |
1440 | 2
1441 |
1442 | name
1443 | punctuation.separator.key-value.gsp
1444 |
1445 | 3
1446 |
1447 | name
1448 | string.quoted.double.gsp
1449 |
1450 | 4
1451 |
1452 | name
1453 | punctuation.definition.string.begin.gsp
1454 |
1455 | 5
1456 |
1457 | name
1458 | punctuation.definition.string.end.gsp
1459 |
1460 |
1461 | match
1462 | (name|property|value)(=)((")[^"]*("))
1463 |
1464 |
1465 |
1466 |
1467 | captures
1468 |
1469 | 1
1470 |
1471 | name
1472 | punctuation.definition.tag.begin.gsp
1473 |
1474 | 2
1475 |
1476 | name
1477 | entity.name.tag.gsp
1478 |
1479 | 3
1480 |
1481 | name
1482 | punctuation.definition.tag.end.gsp
1483 |
1484 |
1485 | end
1486 | >
1487 | match
1488 | (</?)(gsp:text)(>)
1489 | name
1490 | meta.tag.template.text.gsp
1491 |
1492 |
1493 | begin
1494 | (</?)(gsp:useBean)\b
1495 | beginCaptures
1496 |
1497 | 1
1498 |
1499 | name
1500 | punctuation.definition.tag.begin.gsp
1501 |
1502 | 2
1503 |
1504 | name
1505 | entity.name.tag.gsp
1506 |
1507 |
1508 | end
1509 | /?>
1510 | endCaptures
1511 |
1512 | 0
1513 |
1514 | name
1515 | punctuation.definition.tag.end.gsp
1516 |
1517 |
1518 | name
1519 | meta.tag.template.usebean.gsp
1520 | patterns
1521 |
1522 |
1523 | captures
1524 |
1525 | 1
1526 |
1527 | name
1528 | entity.other.attribute-name.gsp
1529 |
1530 | 2
1531 |
1532 | name
1533 | punctuation.separator.key-value.gsp
1534 |
1535 | 3
1536 |
1537 | name
1538 | string.quoted.double.gsp
1539 |
1540 | 4
1541 |
1542 | name
1543 | punctuation.definition.string.begin.gsp
1544 |
1545 | 5
1546 |
1547 | name
1548 | punctuation.definition.string.end.gsp
1549 |
1550 |
1551 | match
1552 | (id|scope|class|type|beanName)(=)((")[^"]*("))
1553 |
1554 |
1555 |
1556 |
1557 |
1558 | directive
1559 |
1560 | begin
1561 | (<)(gsp:directive\.(?=(attribute|include|page|tag|variable)\s))
1562 | beginCaptures
1563 |
1564 | 1
1565 |
1566 | name
1567 | punctuation.definition.tag.begin.gsp
1568 |
1569 | 2
1570 |
1571 | name
1572 | entity.name.tag.gsp
1573 |
1574 |
1575 | end
1576 | />
1577 | endCaptures
1578 |
1579 | 0
1580 |
1581 | name
1582 | punctuation.definition.tag.end.gsp
1583 |
1584 |
1585 | name
1586 | meta.tag.template.$3.gsp
1587 | patterns
1588 |
1589 |
1590 | begin
1591 | \G(attribute)(?=\s)
1592 | captures
1593 |
1594 | 1
1595 |
1596 | name
1597 | entity.name.tag.gsp
1598 |
1599 |
1600 | end
1601 | (?=/>)
1602 | patterns
1603 |
1604 |
1605 | captures
1606 |
1607 | 1
1608 |
1609 | name
1610 | entity.other.attribute-name.gsp
1611 |
1612 | 2
1613 |
1614 | name
1615 | punctuation.separator.key-value.gsp
1616 |
1617 | 3
1618 |
1619 | name
1620 | string.quoted.double.gsp
1621 |
1622 | 4
1623 |
1624 | name
1625 | punctuation.definition.string.begin.gsp
1626 |
1627 | 5
1628 |
1629 | name
1630 | punctuation.definition.string.end.gsp
1631 |
1632 |
1633 | match
1634 | (name|required|fragment|rtexprvalue|type|description)(=)((")[^"]*("))
1635 |
1636 |
1637 |
1638 |
1639 | begin
1640 | \G(include)(?=\s)
1641 | captures
1642 |
1643 | 1
1644 |
1645 | name
1646 | entity.name.tag.gsp
1647 |
1648 |
1649 | end
1650 | (?=/>)
1651 | patterns
1652 |
1653 |
1654 | captures
1655 |
1656 | 1
1657 |
1658 | name
1659 | entity.other.attribute-name.gsp
1660 |
1661 | 2
1662 |
1663 | name
1664 | punctuation.separator.key-value.gsp
1665 |
1666 | 3
1667 |
1668 | name
1669 | string.quoted.double.gsp
1670 |
1671 | 4
1672 |
1673 | name
1674 | punctuation.definition.string.begin.gsp
1675 |
1676 | 5
1677 |
1678 | name
1679 | punctuation.definition.string.end.gsp
1680 |
1681 |
1682 | match
1683 | (file)(=)((")[^"]*("))
1684 |
1685 |
1686 |
1687 |
1688 | begin
1689 | \G(page)(?=\s)
1690 | captures
1691 |
1692 | 1
1693 |
1694 | name
1695 | entity.name.tag.gsp
1696 |
1697 |
1698 | end
1699 | (?=/>)
1700 | patterns
1701 |
1702 |
1703 | captures
1704 |
1705 | 1
1706 |
1707 | name
1708 | entity.other.attribute-name.gsp
1709 |
1710 | 2
1711 |
1712 | name
1713 | punctuation.separator.key-value.gsp
1714 |
1715 | 3
1716 |
1717 | name
1718 | string.quoted.double.gsp
1719 |
1720 | 4
1721 |
1722 | name
1723 | punctuation.definition.string.begin.gsp
1724 |
1725 | 5
1726 |
1727 | name
1728 | punctuation.definition.string.end.gsp
1729 |
1730 |
1731 | match
1732 | (language|extends|import|session|buffer|autoFlush|isThreadSafe|info|errorPage|isErrorPage|contentType|pageEncoding|isElIgnored)(=)((")[^"]*("))
1733 |
1734 |
1735 |
1736 |
1737 | begin
1738 | \G(tag)(?=\s)
1739 | captures
1740 |
1741 | 1
1742 |
1743 | name
1744 | entity.name.tag.gsp
1745 |
1746 |
1747 | end
1748 | (?=/>)
1749 | patterns
1750 |
1751 |
1752 | captures
1753 |
1754 | 1
1755 |
1756 | name
1757 | entity.other.attribute-name.gsp
1758 |
1759 | 2
1760 |
1761 | name
1762 | punctuation.separator.key-value.gsp
1763 |
1764 | 3
1765 |
1766 | name
1767 | string.quoted.double.gsp
1768 |
1769 | 4
1770 |
1771 | name
1772 | punctuation.definition.string.begin.gsp
1773 |
1774 | 5
1775 |
1776 | name
1777 | punctuation.definition.string.end.gsp
1778 |
1779 |
1780 | match
1781 | (display-name|body-content|dynamic-attributes|small-icon|large-icon|description|example|language|import|pageEncoding|isELIgnored)(=)((")[^"]*("))
1782 |
1783 |
1784 |
1785 |
1786 | begin
1787 | \G(variable)(?=\s)
1788 | captures
1789 |
1790 | 1
1791 |
1792 | name
1793 | entity.name.tag.gsp
1794 |
1795 |
1796 | end
1797 | (?=/>)
1798 | patterns
1799 |
1800 |
1801 | captures
1802 |
1803 | 1
1804 |
1805 | name
1806 | entity.other.attribute-name.gsp
1807 |
1808 | 2
1809 |
1810 | name
1811 | punctuation.separator.key-value.gsp
1812 |
1813 | 3
1814 |
1815 | name
1816 | string.quoted.double.gsp
1817 |
1818 | 4
1819 |
1820 | name
1821 | punctuation.definition.string.begin.gsp
1822 |
1823 | 5
1824 |
1825 | name
1826 | punctuation.definition.string.end.gsp
1827 |
1828 |
1829 | match
1830 | (name-given|alias|variable-class|declare|scope|description)(=)((")[^"]*("))
1831 |
1832 |
1833 |
1834 |
1835 |
1836 | embedded
1837 |
1838 | begin
1839 | (<)(gsp:(declaration|expression|scriptlet))(>)
1840 | beginCaptures
1841 |
1842 | 0
1843 |
1844 | name
1845 | meta.tag.template.$3.gsp
1846 |
1847 | 1
1848 |
1849 | name
1850 | punctuation.definition.tag.begin.gsp
1851 |
1852 | 2
1853 |
1854 | name
1855 | entity.name.tag.gsp
1856 |
1857 | 4
1858 |
1859 | name
1860 | punctuation.definition.tag.end.gsp
1861 |
1862 |
1863 | contentName
1864 | source.java
1865 | end
1866 | ((<)/)(gsp:\3)(>)
1867 | endCaptures
1868 |
1869 | 0
1870 |
1871 | name
1872 | meta.tag.template.$4.gsp
1873 |
1874 | 1
1875 |
1876 | name
1877 | punctuation.definition.tag.begin.gsp
1878 |
1879 | 2
1880 |
1881 | name
1882 | source.java
1883 |
1884 | 3
1885 |
1886 | name
1887 | entity.name.tag.gsp
1888 |
1889 | 4
1890 |
1891 | name
1892 | punctuation.definition.tag.end.gsp
1893 |
1894 |
1895 | name
1896 | meta.embedded.block.gsp
1897 | patterns
1898 |
1899 |
1900 | include
1901 | source.java
1902 |
1903 |
1904 |
1905 |
1906 |
1907 |
1908 | scopeName
1909 | text.html.gsp
1910 | uuid
1911 | ACB58B55-9437-4AE6-AF42-854995CF51DF
1912 |
1913 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "es6",
5 | "outDir": "out",
6 | "lib": [
7 | "es6"
8 | ],
9 | "sourceMap": true,
10 | "rootDir": "src",
11 | /* Strict Type-Checking Option */
12 | "strict": true, /* enable all strict type-checking options */
13 | /* Additional Checks */
14 | "noUnusedLocals": true /* Report errors on unused locals. */
15 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
16 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
17 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
18 | },
19 | "exclude": [
20 | "node_modules",
21 | ".vscode-test"
22 | ]
23 | }
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": {
3 | "no-string-throw": true,
4 | "no-unused-expression": true,
5 | "no-duplicate-variable": true,
6 | "curly": true,
7 | "class-name": true,
8 | "semicolon": [
9 | true,
10 | "always"
11 | ],
12 | "triple-equals": true
13 | },
14 | "defaultSeverity": "warning"
15 | }
--------------------------------------------------------------------------------
/vsc-extension-quickstart.md:
--------------------------------------------------------------------------------
1 | # Welcome to your VS Code Extension
2 |
3 | ## What's in the folder
4 | * This folder contains all of the files necessary for your extension.
5 | * `package.json` - this is the manifest file in which you declare your extension and command.
6 | The sample plugin registers a command and defines its title and command name. With this information
7 | VS Code can show the command in the command palette. It doesn’t yet need to load the plugin.
8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command.
9 | The file exports one function, `activate`, which is called the very first time your extension is
10 | activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`.
11 | We pass the function containing the implementation of the command as the second parameter to
12 | `registerCommand`.
13 |
14 | ## Get up and running straight away
15 | * Press `F5` to open a new window with your extension loaded.
16 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`.
17 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension.
18 | * Find output from your extension in the debug console.
19 |
20 | ## Make changes
21 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`.
22 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
23 |
24 | ## Explore the API
25 | * You can open the full set of our API when you open the file `node_modules/vscode/vscode.d.ts`.
26 |
27 | ## Run tests
28 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Launch Tests`.
29 | * Press `F5` to run the tests in a new window with your extension loaded.
30 | * See the output of the test result in the debug console.
31 | * Make changes to `test/extension.test.ts` or create new test files inside the `test` folder.
32 | * By convention, the test runner will only consider files matching the name pattern `**.test.ts`.
33 | * You can create folders inside the `test` folder to structure your tests any way you want.
34 |
--------------------------------------------------------------------------------