aboutsummaryrefslogtreecommitdiff
path: root/code
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-08-10 23:04:09 +0100
committerAleksey Kladov <[email protected]>2018-08-10 23:04:09 +0100
commitf99551f46b1583ed43751e4d26fe76a0b913eb5f (patch)
treef0ab26d58c5bfd7237eb2f0117fcc141a1c3a5f4 /code
parent9863b9161d8d702848516be70c5c8161b7f382e8 (diff)
reorganize
Diffstat (limited to 'code')
-rw-r--r--code/.gitignore1
-rw-r--r--code/common.ts278
-rw-r--r--code/package-lock.json860
-rw-r--r--code/package.json98
-rw-r--r--code/src/extension.ts194
-rw-r--r--code/src/main.ts208
-rw-r--r--code/tsconfig.json5
7 files changed, 350 insertions, 1294 deletions
diff --git a/code/.gitignore b/code/.gitignore
index c3f44bc49..7a3b76693 100644
--- a/code/.gitignore
+++ b/code/.gitignore
@@ -4,3 +4,4 @@ artifacts.json
4*.vsix 4*.vsix
5out/* 5out/*
6node_modules/* 6node_modules/*
7log/*
diff --git a/code/common.ts b/code/common.ts
deleted file mode 100644
index dfd49833d..000000000
--- a/code/common.ts
+++ /dev/null
@@ -1,278 +0,0 @@
1import * as vscode from 'vscode'
2import { log } from 'util'
3
4export function createPlugin(
5 backend,
6 fileExtension: string,
7 disposables: vscode.Disposable[],
8 doHighlighting: boolean = false,
9 diganosticCollection: vscode.DiagnosticCollection | null = null
10) {
11 let uris = {
12 syntaxTree: vscode.Uri.parse(`fall-${fileExtension}://syntaxtree`),
13 metrics: vscode.Uri.parse(`fall-${fileExtension}://metrics`)
14 }
15
16 function updateActiveEditor() {
17 let editor = vscode.window.activeTextEditor
18 if (editor == null) return
19 let file = currentFile()
20 if (file == null) return
21 if (doHighlighting) {
22 setHighlights(editor, file.highlight())
23 }
24 if (diganosticCollection != null) {
25 diganosticCollection.clear()
26 diganosticCollection.set(
27 editor.document.uri,
28 file.diagnostics()
29 )
30 }
31 }
32
33
34 function currentFile(): EditorFile | null {
35 let editor = vscode.window.activeTextEditor
36 if (editor == null) return
37 let doc = editor.document
38 return getFile(doc)
39 }
40
41 vscode.window.onDidChangeActiveTextEditor(updateActiveEditor)
42 let cmd = vscode.commands.registerCommand(`fall-${fileExtension}.applyContextAction`, (range, id) => {
43 let file = currentFile()
44 if (file == null) return
45 return file.applyContextAction(range, id)
46 })
47 disposables.push(cmd)
48
49 return {
50 getFile: getFile,
51 showSyntaxTree: () => {
52 let file = currentFile()
53 if (file == null) return
54 return openDoc(uris.syntaxTree)
55 },
56 metrics: () => {
57 let file = currentFile()
58 if (file == null) return
59 return openDoc(uris.metrics)
60 },
61 extendSelection: () => {
62 let editor = vscode.window.activeTextEditor
63 let file = currentFile()
64 if (editor == null || file == null) return
65 editor.selections = editor.selections.map((s) => {
66 let range = file.extendSelection(s)
67 return new vscode.Selection(range.start, range.end)
68 })
69 },
70 documentSymbolsProvider: new DocumentSymbolProvider(getFile),
71 documentFormattingEditProvider: new DocumentFormattingEditProvider(getFile),
72 codeActionProvider: new CodeActionProvider(getFile, fileExtension)
73 }
74}
75
76
77export interface FileStructureNode {
78 name: string
79 range: [number, number]
80 children: [FileStructureNode]
81}
82
83export interface FallDiagnostic {
84 range: [number, number]
85 severity: string
86 message: string
87}
88
89export class EditorFile {
90 backend;
91 imp;
92 doc: vscode.TextDocument;
93
94 constructor(backend, imp, doc: vscode.TextDocument) {
95 this.backend = backend
96 this.imp = imp
97 this.doc = doc
98 }
99
100 metrics(): string { return this.call("metrics") }
101 syntaxTree(): string { return this.call("syntaxTree") }
102 extendSelection(range_: vscode.Range): vscode.Range | null {
103 let range = fromVsRange(this.doc, range_)
104 let exp = this.call("extendSelection", range)
105 if (exp == null) return null
106 return toVsRange(this.doc, exp)
107 }
108
109 structure(): Array<FileStructureNode> { return this.call("structure") }
110 reformat(): Array<vscode.TextEdit> {
111 let edits = this.call("reformat")
112 return toVsEdits(this.doc, edits)
113 }
114
115 highlight(): Array<[[number, number], string]> { return this.call("highlight") }
116 diagnostics(): Array<vscode.Diagnostic> {
117 return this.call("diagnostics").map((d) => {
118 let range = toVsRange(this.doc, d.range)
119 let severity = d.severity == "Error"
120 ? vscode.DiagnosticSeverity.Error
121 : vscode.DiagnosticSeverity.Warning
122
123 return new vscode.Diagnostic(range, d.message, severity)
124 })
125 }
126
127 contextActions(range_: vscode.Range): Array<string> {
128 let range = fromVsRange(this.doc, range_)
129 let result = this.call("contextActions", range)
130 return result
131 }
132
133 applyContextAction(range_: vscode.Range, id: string) {
134 let range = fromVsRange(this.doc, range_)
135 let edits = this.call("applyContextAction", range, id)
136 let editor = vscode.window.activeTextEditor
137 return editor.edit((builder) => {
138 for (let op of edits) {
139 builder.replace(toVsRange(this.doc, op.delete), op.insert)
140 }
141 })
142 }
143
144 call(method: string, ...args) {
145 let result = this.backend[method](this.imp, ...args)
146 return result
147 }
148}
149
150function documentToFile(backend, fileExtension: string, disposables: vscode.Disposable[], onChange) {
151 let docs = {}
152 function update(doc: vscode.TextDocument, file) {
153 let key = doc.uri.toString()
154 if (file == null) {
155 delete docs[key]
156 } else {
157 docs[key] = file
158 }
159 onChange(doc)
160 }
161 function get(doc: vscode.TextDocument) {
162 return docs[doc.uri.toString()]
163 }
164
165 function isKnownDoc(doc: vscode.TextDocument) {
166 return doc.fileName.endsWith(`.${fileExtension}`)
167 }
168
169 vscode.workspace.onDidChangeTextDocument((event: vscode.TextDocumentChangeEvent) => {
170 let doc = event.document
171 if (!isKnownDoc(event.document)) return
172 let tree = get(doc)
173 if (event.contentChanges.length == 1 && tree) {
174 let edits = event.contentChanges.map((change) => {
175 let start = doc.offsetAt(change.range.start)
176 return {
177 "delete": [start, start + change.rangeLength],
178 "insert": change.text
179 }
180 })
181 update(doc, backend.edit(tree, edits))
182 return
183 }
184 update(doc, null)
185 }, null, disposables)
186
187 vscode.workspace.onDidOpenTextDocument((doc: vscode.TextDocument) => {
188 if (!isKnownDoc(doc)) return
189 update(doc, backend.parse(doc.getText()))
190 }, null, disposables)
191
192 vscode.workspace.onDidCloseTextDocument((doc: vscode.TextDocument) => {
193 update(doc, null)
194 }, null, disposables)
195
196 return (doc: vscode.TextDocument) => {
197 if (!isKnownDoc(doc)) return null
198
199 if (!get(doc)) {
200 update(doc, backend.parse(doc.getText()))
201 }
202 let imp = get(doc)
203 return new EditorFile(backend, imp, doc)
204 }
205}
206
207export class DocumentSymbolProvider implements vscode.DocumentSymbolProvider {
208 getFile: (doc: vscode.TextDocument) => EditorFile | null;
209 constructor(getFile) {
210 this.getFile = getFile
211 }
212
213 provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken) {
214 let file = this.getFile(document)
215 if (file == null) return null
216 return file.structure().map((node) => {
217 return new vscode.SymbolInformation(
218 node.name,
219 vscode.SymbolKind.Function,
220 toVsRange(document, node.range),
221 null,
222 null
223 )
224 })
225 }
226}
227
228export class DocumentFormattingEditProvider implements vscode.DocumentFormattingEditProvider {
229 getFile: (doc: vscode.TextDocument) => EditorFile | null;
230 constructor(getFile) { this.getFile = getFile }
231
232 provideDocumentFormattingEdits(
233 document: vscode.TextDocument,
234 options: vscode.FormattingOptions,
235 token: vscode.CancellationToken
236 ): vscode.TextEdit[] {
237 let file = this.getFile(document)
238 if (file == null) return []
239 return file.reformat()
240 }
241}
242
243export class CodeActionProvider implements vscode.CodeActionProvider {
244 fileExtension: string
245 getFile: (doc: vscode.TextDocument) => EditorFile | null;
246 constructor(getFile, fileExtension) {
247 this.getFile = getFile
248 this.fileExtension = fileExtension
249 }
250
251 provideCodeActions(
252 document: vscode.TextDocument,
253 range: vscode.Range,
254 context: vscode.CodeActionContext,
255 token: vscode.CancellationToken
256 ): vscode.Command[] {
257 let file = this.getFile(document)
258 if (file == null) return
259 let actions = file.contextActions(range)
260 return actions.map((id) => {
261 return {
262 title: id,
263 command: `fall-${this.fileExtension}.applyContextAction`,
264 arguments: [range, id]
265 }
266 })
267 }
268}
269
270
271export function toVsEdits(doc: vscode.TextDocument, edits): Array<vscode.TextEdit> {
272 return edits.map((op) => vscode.TextEdit.replace(toVsRange(doc, op.delete), op.insert))
273}
274
275async function openDoc(uri: vscode.Uri) {
276 let document = await vscode.workspace.openTextDocument(uri)
277 vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true)
278}
diff --git a/code/package-lock.json b/code/package-lock.json
index 1c9a815d8..4f0d14bdf 100644
--- a/code/package-lock.json
+++ b/code/package-lock.json
@@ -5,9 +5,9 @@
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
7 "@types/node": { 7 "@types/node": {
8 "version": "6.0.114", 8 "version": "7.0.69",
9 "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.114.tgz", 9 "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.69.tgz",
10 "integrity": "sha512-5ViC9dwf1VIAtrOFTvOuN04lJgw28eKjuy0Vg2Bd/fSlxKP2feCSkIw04ZgOENL2ywdWrtbkthp1XVLEjJmouw==", 10 "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==",
11 "dev": true 11 "dev": true
12 }, 12 },
13 "ajv": { 13 "ajv": {
@@ -22,23 +22,6 @@
22 "json-schema-traverse": "0.3.1" 22 "json-schema-traverse": "0.3.1"
23 } 23 }
24 }, 24 },
25 "align-text": {
26 "version": "0.1.4",
27 "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
28 "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
29 "dev": true,
30 "requires": {
31 "kind-of": "3.2.2",
32 "longest": "1.0.1",
33 "repeat-string": "1.6.1"
34 }
35 },
36 "amdefine": {
37 "version": "1.0.1",
38 "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
39 "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
40 "dev": true
41 },
42 "ansi-cyan": { 25 "ansi-cyan": {
43 "version": "0.1.1", 26 "version": "0.1.1",
44 "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", 27 "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
@@ -48,21 +31,6 @@
48 "ansi-wrap": "0.1.0" 31 "ansi-wrap": "0.1.0"
49 } 32 }
50 }, 33 },
51 "ansi-escape-sequences": {
52 "version": "4.0.0",
53 "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
54 "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
55 "dev": true,
56 "requires": {
57 "array-back": "2.0.0"
58 }
59 },
60 "ansi-escapes": {
61 "version": "3.1.0",
62 "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
63 "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
64 "dev": true
65 },
66 "ansi-red": { 34 "ansi-red": {
67 "version": "0.1.1", 35 "version": "0.1.1",
68 "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", 36 "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
@@ -72,21 +40,6 @@
72 "ansi-wrap": "0.1.0" 40 "ansi-wrap": "0.1.0"
73 } 41 }
74 }, 42 },
75 "ansi-regex": {
76 "version": "3.0.0",
77 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
78 "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
79 "dev": true
80 },
81 "ansi-styles": {
82 "version": "3.2.1",
83 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
84 "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
85 "dev": true,
86 "requires": {
87 "color-convert": "1.9.2"
88 }
89 },
90 "ansi-wrap": { 43 "ansi-wrap": {
91 "version": "0.1.0", 44 "version": "0.1.0",
92 "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", 45 "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
@@ -124,15 +77,6 @@
124 "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", 77 "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
125 "dev": true 78 "dev": true
126 }, 79 },
127 "array-back": {
128 "version": "2.0.0",
129 "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
130 "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
131 "dev": true,
132 "requires": {
133 "typical": "2.6.1"
134 }
135 },
136 "array-differ": { 80 "array-differ": {
137 "version": "1.0.0", 81 "version": "1.0.0",
138 "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", 82 "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
@@ -173,10 +117,13 @@
173 "dev": true 117 "dev": true
174 }, 118 },
175 "asn1": { 119 "asn1": {
176 "version": "0.2.3", 120 "version": "0.2.4",
177 "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 121 "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
178 "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 122 "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
179 "dev": true 123 "dev": true,
124 "requires": {
125 "safer-buffer": "2.1.2"
126 }
180 }, 127 },
181 "assert-plus": { 128 "assert-plus": {
182 "version": "1.0.0", 129 "version": "1.0.0",
@@ -184,12 +131,6 @@
184 "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 131 "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
185 "dev": true 132 "dev": true
186 }, 133 },
187 "async": {
188 "version": "1.5.2",
189 "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
190 "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
191 "dev": true
192 },
193 "asynckit": { 134 "asynckit": {
194 "version": "0.4.0", 135 "version": "0.4.0",
195 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 136 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -203,9 +144,9 @@
203 "dev": true 144 "dev": true
204 }, 145 },
205 "aws4": { 146 "aws4": {
206 "version": "1.7.0", 147 "version": "1.8.0",
207 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", 148 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
208 "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", 149 "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
209 "dev": true 150 "dev": true
210 }, 151 },
211 "balanced-match": { 152 "balanced-match": {
@@ -273,58 +214,17 @@
273 "dev": true 214 "dev": true
274 }, 215 },
275 "buffer-from": { 216 "buffer-from": {
276 "version": "1.1.0", 217 "version": "1.1.1",
277 "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", 218 "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
278 "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", 219 "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
279 "dev": true
280 },
281 "builtins": {
282 "version": "1.0.3",
283 "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
284 "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
285 "dev": true 220 "dev": true
286 }, 221 },
287 "camelcase": {
288 "version": "1.2.1",
289 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
290 "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
291 "dev": true,
292 "optional": true
293 },
294 "caseless": { 222 "caseless": {
295 "version": "0.12.0", 223 "version": "0.12.0",
296 "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 224 "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
297 "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 225 "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
298 "dev": true 226 "dev": true
299 }, 227 },
300 "center-align": {
301 "version": "0.1.3",
302 "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
303 "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
304 "dev": true,
305 "optional": true,
306 "requires": {
307 "align-text": "0.1.4",
308 "lazy-cache": "1.0.4"
309 }
310 },
311 "chalk": {
312 "version": "2.1.0",
313 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
314 "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
315 "dev": true,
316 "requires": {
317 "ansi-styles": "3.2.1",
318 "escape-string-regexp": "1.0.5",
319 "supports-color": "4.5.0"
320 }
321 },
322 "chardet": {
323 "version": "0.4.2",
324 "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
325 "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
326 "dev": true
327 },
328 "cheerio": { 228 "cheerio": {
329 "version": "1.0.0-rc.2", 229 "version": "1.0.0-rc.2",
330 "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", 230 "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
@@ -339,42 +239,6 @@
339 "parse5": "3.0.3" 239 "parse5": "3.0.3"
340 } 240 }
341 }, 241 },
342 "cli-cursor": {
343 "version": "2.1.0",
344 "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
345 "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
346 "dev": true,
347 "requires": {
348 "restore-cursor": "2.0.0"
349 }
350 },
351 "cli-width": {
352 "version": "2.2.0",
353 "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
354 "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
355 "dev": true
356 },
357 "cliui": {
358 "version": "2.1.0",
359 "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
360 "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
361 "dev": true,
362 "optional": true,
363 "requires": {
364 "center-align": "0.1.3",
365 "right-align": "0.1.3",
366 "wordwrap": "0.0.2"
367 },
368 "dependencies": {
369 "wordwrap": {
370 "version": "0.0.2",
371 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
372 "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
373 "dev": true,
374 "optional": true
375 }
376 }
377 },
378 "clone": { 242 "clone": {
379 "version": "0.2.0", 243 "version": "0.2.0",
380 "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", 244 "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
@@ -410,21 +274,6 @@
410 "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 274 "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
411 "dev": true 275 "dev": true
412 }, 276 },
413 "color-convert": {
414 "version": "1.9.2",
415 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
416 "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
417 "dev": true,
418 "requires": {
419 "color-name": "1.1.1"
420 }
421 },
422 "color-name": {
423 "version": "1.1.1",
424 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
425 "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
426 "dev": true
427 },
428 "combined-stream": { 277 "combined-stream": {
429 "version": "1.0.6", 278 "version": "1.0.6",
430 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 279 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
@@ -434,42 +283,10 @@
434 "delayed-stream": "1.0.0" 283 "delayed-stream": "1.0.0"
435 } 284 }
436 }, 285 },
437 "command-line-args": {
438 "version": "4.0.7",
439 "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz",
440 "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==",
441 "dev": true,
442 "requires": {
443 "array-back": "2.0.0",
444 "find-replace": "1.0.3",
445 "typical": "2.6.1"
446 }
447 },
448 "command-line-commands": {
449 "version": "2.0.1",
450 "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-2.0.1.tgz",
451 "integrity": "sha512-m8c2p1DrNd2ruIAggxd/y6DgygQayf6r8RHwchhXryaLF8I6koYjoYroVP+emeROE9DXN5b9sP1Gh+WtvTTdtQ==",
452 "dev": true,
453 "requires": {
454 "array-back": "2.0.0"
455 }
456 },
457 "command-line-usage": {
458 "version": "4.1.0",
459 "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
460 "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
461 "dev": true,
462 "requires": {
463 "ansi-escape-sequences": "4.0.0",
464 "array-back": "2.0.0",
465 "table-layout": "0.4.4",
466 "typical": "2.6.1"
467 }
468 },
469 "commander": { 286 "commander": {
470 "version": "2.16.0", 287 "version": "2.17.1",
471 "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", 288 "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
472 "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", 289 "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
473 "dev": true 290 "dev": true
474 }, 291 },
475 "concat-map": { 292 "concat-map": {
@@ -526,13 +343,6 @@
526 "ms": "2.0.0" 343 "ms": "2.0.0"
527 } 344 }
528 }, 345 },
529 "decamelize": {
530 "version": "1.2.0",
531 "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
532 "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
533 "dev": true,
534 "optional": true
535 },
536 "deep-assign": { 346 "deep-assign": {
537 "version": "1.0.0", 347 "version": "1.0.0",
538 "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", 348 "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz",
@@ -542,12 +352,6 @@
542 "is-obj": "1.0.1" 352 "is-obj": "1.0.1"
543 } 353 }
544 }, 354 },
545 "deep-extend": {
546 "version": "0.6.0",
547 "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
548 "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
549 "dev": true
550 },
551 "delayed-stream": { 355 "delayed-stream": {
552 "version": "1.0.0", 356 "version": "1.0.0",
553 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 357 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -705,25 +509,6 @@
705 "dev": true, 509 "dev": true,
706 "requires": { 510 "requires": {
707 "kind-of": "1.1.0" 511 "kind-of": "1.1.0"
708 },
709 "dependencies": {
710 "kind-of": {
711 "version": "1.1.0",
712 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
713 "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
714 "dev": true
715 }
716 }
717 },
718 "external-editor": {
719 "version": "2.2.0",
720 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
721 "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
722 "dev": true,
723 "requires": {
724 "chardet": "0.4.2",
725 "iconv-lite": "0.4.23",
726 "tmp": "0.0.33"
727 } 512 }
728 }, 513 },
729 "extglob": { 514 "extglob": {
@@ -770,15 +555,6 @@
770 "pend": "1.2.0" 555 "pend": "1.2.0"
771 } 556 }
772 }, 557 },
773 "figures": {
774 "version": "2.0.0",
775 "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
776 "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
777 "dev": true,
778 "requires": {
779 "escape-string-regexp": "1.0.5"
780 }
781 },
782 "filename-regex": { 558 "filename-regex": {
783 "version": "2.0.1", 559 "version": "2.0.1",
784 "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 560 "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
@@ -793,32 +569,11 @@
793 "requires": { 569 "requires": {
794 "is-number": "2.1.0", 570 "is-number": "2.1.0",
795 "isobject": "2.1.0", 571 "isobject": "2.1.0",
796 "randomatic": "3.0.0", 572 "randomatic": "3.1.0",
797 "repeat-element": "1.1.2", 573 "repeat-element": "1.1.2",
798 "repeat-string": "1.6.1" 574 "repeat-string": "1.6.1"
799 } 575 }
800 }, 576 },
801 "find-replace": {
802 "version": "1.0.3",
803 "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
804 "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
805 "dev": true,
806 "requires": {
807 "array-back": "1.0.4",
808 "test-value": "2.1.0"
809 },
810 "dependencies": {
811 "array-back": {
812 "version": "1.0.4",
813 "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
814 "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
815 "dev": true,
816 "requires": {
817 "typical": "2.6.1"
818 }
819 }
820 }
821 },
822 "first-chunk-stream": { 577 "first-chunk-stream": {
823 "version": "1.0.0", 578 "version": "1.0.0",
824 "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", 579 "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
@@ -890,15 +645,6 @@
890 "assert-plus": "1.0.0" 645 "assert-plus": "1.0.0"
891 } 646 }
892 }, 647 },
893 "git-config": {
894 "version": "0.0.7",
895 "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz",
896 "integrity": "sha1-qcij7wendsPXImE1bYtye2IgKyg=",
897 "dev": true,
898 "requires": {
899 "iniparser": "1.0.5"
900 }
901 },
902 "glob": { 648 "glob": {
903 "version": "7.1.2", 649 "version": "7.1.2",
904 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 650 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
@@ -1118,9 +864,9 @@
1118 }, 864 },
1119 "dependencies": { 865 "dependencies": {
1120 "clone": { 866 "clone": {
1121 "version": "2.1.1", 867 "version": "2.1.2",
1122 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", 868 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
1123 "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", 869 "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
1124 "dev": true 870 "dev": true
1125 }, 871 },
1126 "clone-stats": { 872 "clone-stats": {
@@ -1135,7 +881,7 @@
1135 "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", 881 "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
1136 "dev": true, 882 "dev": true,
1137 "requires": { 883 "requires": {
1138 "clone": "2.1.1", 884 "clone": "2.1.2",
1139 "clone-buffer": "1.0.0", 885 "clone-buffer": "1.0.0",
1140 "clone-stats": "1.0.0", 886 "clone-stats": "1.0.0",
1141 "cloneable-readable": "1.1.2", 887 "cloneable-readable": "1.1.2",
@@ -1249,9 +995,9 @@
1249 }, 995 },
1250 "dependencies": { 996 "dependencies": {
1251 "clone": { 997 "clone": {
1252 "version": "2.1.1", 998 "version": "2.1.2",
1253 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", 999 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
1254 "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", 1000 "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
1255 "dev": true 1001 "dev": true
1256 }, 1002 },
1257 "clone-stats": { 1003 "clone-stats": {
@@ -1275,7 +1021,7 @@
1275 "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", 1021 "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
1276 "dev": true, 1022 "dev": true,
1277 "requires": { 1023 "requires": {
1278 "clone": "2.1.1", 1024 "clone": "2.1.2",
1279 "clone-buffer": "1.0.0", 1025 "clone-buffer": "1.0.0",
1280 "clone-stats": "1.0.0", 1026 "clone-stats": "1.0.0",
1281 "cloneable-readable": "1.1.2", 1027 "cloneable-readable": "1.1.2",
@@ -1285,18 +1031,6 @@
1285 } 1031 }
1286 } 1032 }
1287 }, 1033 },
1288 "handlebars": {
1289 "version": "4.0.11",
1290 "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
1291 "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
1292 "dev": true,
1293 "requires": {
1294 "async": "1.5.2",
1295 "optimist": "0.6.1",
1296 "source-map": "0.4.4",
1297 "uglify-js": "2.8.29"
1298 }
1299 },
1300 "har-schema": { 1034 "har-schema": {
1301 "version": "2.0.0", 1035 "version": "2.0.0",
1302 "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1036 "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -1350,15 +1084,6 @@
1350 "sshpk": "1.14.2" 1084 "sshpk": "1.14.2"
1351 } 1085 }
1352 }, 1086 },
1353 "iconv-lite": {
1354 "version": "0.4.23",
1355 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
1356 "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
1357 "dev": true,
1358 "requires": {
1359 "safer-buffer": "2.1.2"
1360 }
1361 },
1362 "inflight": { 1087 "inflight": {
1363 "version": "1.0.6", 1088 "version": "1.0.6",
1364 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1089 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -1375,34 +1100,6 @@
1375 "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1100 "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1376 "dev": true 1101 "dev": true
1377 }, 1102 },
1378 "iniparser": {
1379 "version": "1.0.5",
1380 "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz",
1381 "integrity": "sha1-g21r7+bfv87gvM8c+fKsxwJ/eD0=",
1382 "dev": true
1383 },
1384 "inquirer": {
1385 "version": "3.3.0",
1386 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
1387 "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
1388 "dev": true,
1389 "requires": {
1390 "ansi-escapes": "3.1.0",
1391 "chalk": "2.1.0",
1392 "cli-cursor": "2.1.0",
1393 "cli-width": "2.2.0",
1394 "external-editor": "2.2.0",
1395 "figures": "2.0.0",
1396 "lodash": "4.17.10",
1397 "mute-stream": "0.0.7",
1398 "run-async": "2.3.0",
1399 "rx-lite": "4.0.8",
1400 "rx-lite-aggregates": "4.0.8",
1401 "string-width": "2.1.1",
1402 "strip-ansi": "4.0.0",
1403 "through": "2.3.8"
1404 }
1405 },
1406 "is": { 1103 "is": {
1407 "version": "3.2.1", 1104 "version": "3.2.1",
1408 "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", 1105 "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz",
@@ -1442,12 +1139,6 @@
1442 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1139 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1443 "dev": true 1140 "dev": true
1444 }, 1141 },
1445 "is-fullwidth-code-point": {
1446 "version": "2.0.0",
1447 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1448 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1449 "dev": true
1450 },
1451 "is-glob": { 1142 "is-glob": {
1452 "version": "3.1.0", 1143 "version": "3.1.0",
1453 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 1144 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
@@ -1464,6 +1155,17 @@
1464 "dev": true, 1155 "dev": true,
1465 "requires": { 1156 "requires": {
1466 "kind-of": "3.2.2" 1157 "kind-of": "3.2.2"
1158 },
1159 "dependencies": {
1160 "kind-of": {
1161 "version": "3.2.2",
1162 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1163 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1164 "dev": true,
1165 "requires": {
1166 "is-buffer": "1.1.6"
1167 }
1168 }
1467 } 1169 }
1468 }, 1170 },
1469 "is-obj": { 1171 "is-obj": {
@@ -1484,12 +1186,6 @@
1484 "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 1186 "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
1485 "dev": true 1187 "dev": true
1486 }, 1188 },
1487 "is-promise": {
1488 "version": "2.1.0",
1489 "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
1490 "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
1491 "dev": true
1492 },
1493 "is-stream": { 1189 "is-stream": {
1494 "version": "1.1.0", 1190 "version": "1.1.0",
1495 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1191 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -1588,20 +1284,10 @@
1588 } 1284 }
1589 }, 1285 },
1590 "kind-of": { 1286 "kind-of": {
1591 "version": "3.2.2", 1287 "version": "1.1.0",
1592 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1288 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
1593 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1289 "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
1594 "dev": true, 1290 "dev": true
1595 "requires": {
1596 "is-buffer": "1.1.6"
1597 }
1598 },
1599 "lazy-cache": {
1600 "version": "1.0.4",
1601 "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
1602 "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
1603 "dev": true,
1604 "optional": true
1605 }, 1291 },
1606 "lazystream": { 1292 "lazystream": {
1607 "version": "1.0.0", 1293 "version": "1.0.0",
@@ -1633,18 +1319,6 @@
1633 "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", 1319 "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
1634 "dev": true 1320 "dev": true
1635 }, 1321 },
1636 "lodash.padend": {
1637 "version": "4.6.1",
1638 "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
1639 "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
1640 "dev": true
1641 },
1642 "longest": {
1643 "version": "1.0.1",
1644 "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
1645 "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
1646 "dev": true
1647 },
1648 "map-stream": { 1322 "map-stream": {
1649 "version": "0.1.0", 1323 "version": "0.1.0",
1650 "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 1324 "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
@@ -1729,6 +1403,15 @@
1729 "requires": { 1403 "requires": {
1730 "is-extglob": "1.0.0" 1404 "is-extglob": "1.0.0"
1731 } 1405 }
1406 },
1407 "kind-of": {
1408 "version": "3.2.2",
1409 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1410 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1411 "dev": true,
1412 "requires": {
1413 "is-buffer": "1.1.6"
1414 }
1732 } 1415 }
1733 } 1416 }
1734 }, 1417 },
@@ -1753,12 +1436,6 @@
1753 "mime-db": "1.35.0" 1436 "mime-db": "1.35.0"
1754 } 1437 }
1755 }, 1438 },
1756 "mimic-fn": {
1757 "version": "1.2.0",
1758 "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
1759 "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
1760 "dev": true
1761 },
1762 "minimatch": { 1439 "minimatch": {
1763 "version": "3.0.4", 1440 "version": "3.0.4",
1764 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1441 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -1769,9 +1446,9 @@
1769 } 1446 }
1770 }, 1447 },
1771 "minimist": { 1448 "minimist": {
1772 "version": "0.0.10", 1449 "version": "0.0.8",
1773 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 1450 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1774 "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 1451 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1775 "dev": true 1452 "dev": true
1776 }, 1453 },
1777 "mkdirp": { 1454 "mkdirp": {
@@ -1781,14 +1458,6 @@
1781 "dev": true, 1458 "dev": true,
1782 "requires": { 1459 "requires": {
1783 "minimist": "0.0.8" 1460 "minimist": "0.0.8"
1784 },
1785 "dependencies": {
1786 "minimist": {
1787 "version": "0.0.8",
1788 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1789 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1790 "dev": true
1791 }
1792 } 1461 }
1793 }, 1462 },
1794 "mocha": { 1463 "mocha": {
@@ -1814,15 +1483,6 @@
1814 "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 1483 "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
1815 "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 1484 "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
1816 "dev": true 1485 "dev": true
1817 },
1818 "supports-color": {
1819 "version": "4.4.0",
1820 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
1821 "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
1822 "dev": true,
1823 "requires": {
1824 "has-flag": "2.0.0"
1825 }
1826 } 1486 }
1827 } 1487 }
1828 }, 1488 },
@@ -1850,30 +1510,6 @@
1850 "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 1510 "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
1851 "dev": true 1511 "dev": true
1852 }, 1512 },
1853 "neon-cli": {
1854 "version": "0.2.0",
1855 "resolved": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.2.0.tgz",
1856 "integrity": "sha512-IsrxCyUcuAyWiq4Z+JnTXrjurj2SAL2VtWnCXS8iBYGJeIs1NIhFuLaM6fe7+rOyFfDcqUUTWGxZmkvUqwweRA==",
1857 "dev": true,
1858 "requires": {
1859 "chalk": "2.1.0",
1860 "command-line-args": "4.0.7",
1861 "command-line-commands": "2.0.1",
1862 "command-line-usage": "4.1.0",
1863 "git-config": "0.0.7",
1864 "handlebars": "4.0.11",
1865 "inquirer": "3.3.0",
1866 "mkdirp": "0.5.1",
1867 "quickly-copy-file": "1.0.0",
1868 "rimraf": "2.6.2",
1869 "rsvp": "4.8.3",
1870 "semver": "5.5.0",
1871 "toml": "2.3.3",
1872 "ts-typed-json": "0.2.2",
1873 "validate-npm-package-license": "3.0.3",
1874 "validate-npm-package-name": "3.0.0"
1875 }
1876 },
1877 "node.extend": { 1513 "node.extend": {
1878 "version": "1.1.6", 1514 "version": "1.1.6",
1879 "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", 1515 "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz",
@@ -1932,25 +1568,6 @@
1932 "wrappy": "1.0.2" 1568 "wrappy": "1.0.2"
1933 } 1569 }
1934 }, 1570 },
1935 "onetime": {
1936 "version": "2.0.1",
1937 "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
1938 "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
1939 "dev": true,
1940 "requires": {
1941 "mimic-fn": "1.2.0"
1942 }
1943 },
1944 "optimist": {
1945 "version": "0.6.1",
1946 "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1947 "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1948 "dev": true,
1949 "requires": {
1950 "minimist": "0.0.10",
1951 "wordwrap": "0.0.3"
1952 }
1953 },
1954 "ordered-read-streams": { 1571 "ordered-read-streams": {
1955 "version": "0.3.0", 1572 "version": "0.3.0",
1956 "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", 1573 "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
@@ -2027,7 +1644,7 @@
2027 "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", 1644 "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
2028 "dev": true, 1645 "dev": true,
2029 "requires": { 1646 "requires": {
2030 "@types/node": "6.0.114" 1647 "@types/node": "7.0.69"
2031 } 1648 }
2032 }, 1649 },
2033 "path-dirname": { 1650 "path-dirname": {
@@ -2121,19 +1738,10 @@
2121 "inherits": "2.0.3" 1738 "inherits": "2.0.3"
2122 } 1739 }
2123 }, 1740 },
2124 "quickly-copy-file": {
2125 "version": "1.0.0",
2126 "resolved": "https://registry.npmjs.org/quickly-copy-file/-/quickly-copy-file-1.0.0.tgz",
2127 "integrity": "sha1-n4/wZiMFEO50IrASFHKwk6hpCFk=",
2128 "dev": true,
2129 "requires": {
2130 "mkdirp": "0.5.1"
2131 }
2132 },
2133 "randomatic": { 1741 "randomatic": {
2134 "version": "3.0.0", 1742 "version": "3.1.0",
2135 "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", 1743 "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz",
2136 "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", 1744 "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==",
2137 "dev": true, 1745 "dev": true,
2138 "requires": { 1746 "requires": {
2139 "is-number": "4.0.0", 1747 "is-number": "4.0.0",
@@ -2179,12 +1787,6 @@
2179 "util-deprecate": "1.0.2" 1787 "util-deprecate": "1.0.2"
2180 } 1788 }
2181 }, 1789 },
2182 "reduce-flatten": {
2183 "version": "1.0.1",
2184 "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
2185 "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
2186 "dev": true
2187 },
2188 "regex-cache": { 1790 "regex-cache": {
2189 "version": "0.4.4", 1791 "version": "0.4.4",
2190 "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", 1792 "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
@@ -2225,7 +1827,7 @@
2225 "dev": true, 1827 "dev": true,
2226 "requires": { 1828 "requires": {
2227 "aws-sign2": "0.7.0", 1829 "aws-sign2": "0.7.0",
2228 "aws4": "1.7.0", 1830 "aws4": "1.8.0",
2229 "caseless": "0.12.0", 1831 "caseless": "0.12.0",
2230 "combined-stream": "1.0.6", 1832 "combined-stream": "1.0.6",
2231 "extend": "3.0.2", 1833 "extend": "3.0.2",
@@ -2252,26 +1854,6 @@
2252 "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 1854 "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
2253 "dev": true 1855 "dev": true
2254 }, 1856 },
2255 "restore-cursor": {
2256 "version": "2.0.0",
2257 "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
2258 "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
2259 "dev": true,
2260 "requires": {
2261 "onetime": "2.0.1",
2262 "signal-exit": "3.0.2"
2263 }
2264 },
2265 "right-align": {
2266 "version": "0.1.3",
2267 "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
2268 "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
2269 "dev": true,
2270 "optional": true,
2271 "requires": {
2272 "align-text": "0.1.4"
2273 }
2274 },
2275 "rimraf": { 1857 "rimraf": {
2276 "version": "2.6.2", 1858 "version": "2.6.2",
2277 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1859 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
@@ -2281,36 +1863,6 @@
2281 "glob": "7.1.2" 1863 "glob": "7.1.2"
2282 } 1864 }
2283 }, 1865 },
2284 "rsvp": {
2285 "version": "4.8.3",
2286 "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.3.tgz",
2287 "integrity": "sha512-/OlbK31XtkPnLD2ktmZXj4g/v6q1boTDr6/3lFuDTgxVsrA3h7PH5eYyAxIvDMjRHr/DoOlzNicqDwBEo9xU7g==",
2288 "dev": true
2289 },
2290 "run-async": {
2291 "version": "2.3.0",
2292 "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
2293 "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
2294 "dev": true,
2295 "requires": {
2296 "is-promise": "2.1.0"
2297 }
2298 },
2299 "rx-lite": {
2300 "version": "4.0.8",
2301 "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
2302 "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
2303 "dev": true
2304 },
2305 "rx-lite-aggregates": {
2306 "version": "4.0.8",
2307 "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
2308 "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
2309 "dev": true,
2310 "requires": {
2311 "rx-lite": "4.0.8"
2312 }
2313 },
2314 "safe-buffer": { 1866 "safe-buffer": {
2315 "version": "5.1.2", 1867 "version": "5.1.2",
2316 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1868 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -2329,71 +1881,22 @@
2329 "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", 1881 "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
2330 "dev": true 1882 "dev": true
2331 }, 1883 },
2332 "signal-exit": {
2333 "version": "3.0.2",
2334 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
2335 "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
2336 "dev": true
2337 },
2338 "source-map": { 1884 "source-map": {
2339 "version": "0.4.4", 1885 "version": "0.6.1",
2340 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 1886 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2341 "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 1887 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2342 "dev": true, 1888 "dev": true
2343 "requires": {
2344 "amdefine": "1.0.1"
2345 }
2346 }, 1889 },
2347 "source-map-support": { 1890 "source-map-support": {
2348 "version": "0.5.6", 1891 "version": "0.5.8",
2349 "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", 1892 "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.8.tgz",
2350 "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", 1893 "integrity": "sha512-WqAEWPdb78u25RfKzOF0swBpY0dKrNdjc4GvLwm7ScX/o9bj8Eh/YL8mcMhBHYDGl87UkkSXDOFnW4G7GhWhGg==",
2351 "dev": true, 1894 "dev": true,
2352 "requires": { 1895 "requires": {
2353 "buffer-from": "1.1.0", 1896 "buffer-from": "1.1.1",
2354 "source-map": "0.6.1" 1897 "source-map": "0.6.1"
2355 },
2356 "dependencies": {
2357 "source-map": {
2358 "version": "0.6.1",
2359 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2360 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2361 "dev": true
2362 }
2363 }
2364 },
2365 "spdx-correct": {
2366 "version": "3.0.0",
2367 "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
2368 "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
2369 "dev": true,
2370 "requires": {
2371 "spdx-expression-parse": "3.0.0",
2372 "spdx-license-ids": "3.0.0"
2373 }
2374 },
2375 "spdx-exceptions": {
2376 "version": "2.1.0",
2377 "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
2378 "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
2379 "dev": true
2380 },
2381 "spdx-expression-parse": {
2382 "version": "3.0.0",
2383 "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
2384 "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
2385 "dev": true,
2386 "requires": {
2387 "spdx-exceptions": "2.1.0",
2388 "spdx-license-ids": "3.0.0"
2389 } 1898 }
2390 }, 1899 },
2391 "spdx-license-ids": {
2392 "version": "3.0.0",
2393 "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
2394 "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
2395 "dev": true
2396 },
2397 "split": { 1900 "split": {
2398 "version": "0.3.3", 1901 "version": "0.3.3",
2399 "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 1902 "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
@@ -2415,7 +1918,7 @@
2415 "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", 1918 "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
2416 "dev": true, 1919 "dev": true,
2417 "requires": { 1920 "requires": {
2418 "asn1": "0.2.3", 1921 "asn1": "0.2.4",
2419 "assert-plus": "1.0.0", 1922 "assert-plus": "1.0.0",
2420 "bcrypt-pbkdf": "1.0.2", 1923 "bcrypt-pbkdf": "1.0.2",
2421 "dashdash": "1.14.1", 1924 "dashdash": "1.14.1",
@@ -2462,16 +1965,6 @@
2462 "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=", 1965 "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=",
2463 "dev": true 1966 "dev": true
2464 }, 1967 },
2465 "string-width": {
2466 "version": "2.1.1",
2467 "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
2468 "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
2469 "dev": true,
2470 "requires": {
2471 "is-fullwidth-code-point": "2.0.0",
2472 "strip-ansi": "4.0.0"
2473 }
2474 },
2475 "string_decoder": { 1968 "string_decoder": {
2476 "version": "1.1.1", 1969 "version": "1.1.1",
2477 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1970 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2481,15 +1974,6 @@
2481 "safe-buffer": "5.1.2" 1974 "safe-buffer": "5.1.2"
2482 } 1975 }
2483 }, 1976 },
2484 "strip-ansi": {
2485 "version": "4.0.0",
2486 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
2487 "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
2488 "dev": true,
2489 "requires": {
2490 "ansi-regex": "3.0.0"
2491 }
2492 },
2493 "strip-bom": { 1977 "strip-bom": {
2494 "version": "2.0.0", 1978 "version": "2.0.0",
2495 "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1979 "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
@@ -2510,27 +1994,14 @@
2510 } 1994 }
2511 }, 1995 },
2512 "supports-color": { 1996 "supports-color": {
2513 "version": "4.5.0", 1997 "version": "4.4.0",
2514 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 1998 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
2515 "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 1999 "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
2516 "dev": true, 2000 "dev": true,
2517 "requires": { 2001 "requires": {
2518 "has-flag": "2.0.0" 2002 "has-flag": "2.0.0"
2519 } 2003 }
2520 }, 2004 },
2521 "table-layout": {
2522 "version": "0.4.4",
2523 "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz",
2524 "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==",
2525 "dev": true,
2526 "requires": {
2527 "array-back": "2.0.0",
2528 "deep-extend": "0.6.0",
2529 "lodash.padend": "4.6.1",
2530 "typical": "2.6.1",
2531 "wordwrapjs": "3.0.0"
2532 }
2533 },
2534 "tar": { 2005 "tar": {
2535 "version": "2.2.1", 2006 "version": "2.2.1",
2536 "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", 2007 "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
@@ -2542,27 +2013,6 @@
2542 "inherits": "2.0.3" 2013 "inherits": "2.0.3"
2543 } 2014 }
2544 }, 2015 },
2545 "test-value": {
2546 "version": "2.1.0",
2547 "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
2548 "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
2549 "dev": true,
2550 "requires": {
2551 "array-back": "1.0.4",
2552 "typical": "2.6.1"
2553 },
2554 "dependencies": {
2555 "array-back": {
2556 "version": "1.0.4",
2557 "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
2558 "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
2559 "dev": true,
2560 "requires": {
2561 "typical": "2.6.1"
2562 }
2563 }
2564 }
2565 },
2566 "through": { 2016 "through": {
2567 "version": "2.3.8", 2017 "version": "2.3.8",
2568 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2018 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -2590,9 +2040,9 @@
2590 } 2040 }
2591 }, 2041 },
2592 "tmp": { 2042 "tmp": {
2593 "version": "0.0.33", 2043 "version": "0.0.29",
2594 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2044 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
2595 "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2045 "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
2596 "dev": true, 2046 "dev": true,
2597 "requires": { 2047 "requires": {
2598 "os-tmpdir": "1.0.2" 2048 "os-tmpdir": "1.0.2"
@@ -2618,12 +2068,6 @@
2618 } 2068 }
2619 } 2069 }
2620 }, 2070 },
2621 "toml": {
2622 "version": "2.3.3",
2623 "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.3.tgz",
2624 "integrity": "sha512-O7L5hhSQHxuufWUdcTRPfuTh3phKfAZ/dqfxZFoxPCj2RYmpaSGLEIs016FCXItQwNr08yefUB5TSjzRYnajTA==",
2625 "dev": true
2626 },
2627 "tough-cookie": { 2071 "tough-cookie": {
2628 "version": "2.3.4", 2072 "version": "2.3.4",
2629 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 2073 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
@@ -2633,23 +2077,6 @@
2633 "punycode": "1.4.1" 2077 "punycode": "1.4.1"
2634 } 2078 }
2635 }, 2079 },
2636 "ts-typed-json": {
2637 "version": "0.2.2",
2638 "resolved": "https://registry.npmjs.org/ts-typed-json/-/ts-typed-json-0.2.2.tgz",
2639 "integrity": "sha1-UxhL7ok+RZkbc8jEY6OLWeJ81H4=",
2640 "dev": true,
2641 "requires": {
2642 "rsvp": "3.6.2"
2643 },
2644 "dependencies": {
2645 "rsvp": {
2646 "version": "3.6.2",
2647 "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
2648 "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
2649 "dev": true
2650 }
2651 }
2652 },
2653 "tunnel": { 2080 "tunnel": {
2654 "version": "0.0.4", 2081 "version": "0.0.4",
2655 "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", 2082 "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
@@ -2696,46 +2123,12 @@
2696 "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", 2123 "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
2697 "dev": true 2124 "dev": true
2698 }, 2125 },
2699 "typical": {
2700 "version": "2.6.1",
2701 "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
2702 "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
2703 "dev": true
2704 },
2705 "uc.micro": { 2126 "uc.micro": {
2706 "version": "1.0.5", 2127 "version": "1.0.5",
2707 "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz", 2128 "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz",
2708 "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==", 2129 "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==",
2709 "dev": true 2130 "dev": true
2710 }, 2131 },
2711 "uglify-js": {
2712 "version": "2.8.29",
2713 "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
2714 "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
2715 "dev": true,
2716 "optional": true,
2717 "requires": {
2718 "source-map": "0.5.7",
2719 "uglify-to-browserify": "1.0.2",
2720 "yargs": "3.10.0"
2721 },
2722 "dependencies": {
2723 "source-map": {
2724 "version": "0.5.7",
2725 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
2726 "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
2727 "dev": true,
2728 "optional": true
2729 }
2730 }
2731 },
2732 "uglify-to-browserify": {
2733 "version": "1.0.2",
2734 "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
2735 "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
2736 "dev": true,
2737 "optional": true
2738 },
2739 "underscore": { 2132 "underscore": {
2740 "version": "1.9.1", 2133 "version": "1.9.1",
2741 "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", 2134 "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
@@ -2786,25 +2179,6 @@
2786 "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", 2179 "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
2787 "dev": true 2180 "dev": true
2788 }, 2181 },
2789 "validate-npm-package-license": {
2790 "version": "3.0.3",
2791 "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
2792 "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
2793 "dev": true,
2794 "requires": {
2795 "spdx-correct": "3.0.0",
2796 "spdx-expression-parse": "3.0.0"
2797 }
2798 },
2799 "validate-npm-package-name": {
2800 "version": "3.0.0",
2801 "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz",
2802 "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=",
2803 "dev": true,
2804 "requires": {
2805 "builtins": "1.0.3"
2806 }
2807 },
2808 "verror": { 2182 "verror": {
2809 "version": "1.10.0", 2183 "version": "1.10.0",
2810 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2184 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
@@ -2887,13 +2261,13 @@
2887 } 2261 }
2888 }, 2262 },
2889 "vsce": { 2263 "vsce": {
2890 "version": "1.44.0", 2264 "version": "1.46.0",
2891 "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.44.0.tgz", 2265 "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.46.0.tgz",
2892 "integrity": "sha512-JK8jLwXgfcxo9aNBKBLNbCF4tEOiB8QdhVaXaGiqpadXLgqKBRNsq24KUzBYlmqZEIq0kdW5n2CtXLBozVPCrg==", 2266 "integrity": "sha512-cNQru5mXBPUtMDgwRNoespaR0gjdL09hV1KWktT5wkmTZfv0dSaAqqGAfr+2UI0aJTGttCcO3xKFQqtIcJpczA==",
2893 "dev": true, 2267 "dev": true,
2894 "requires": { 2268 "requires": {
2895 "cheerio": "1.0.0-rc.2", 2269 "cheerio": "1.0.0-rc.2",
2896 "commander": "2.16.0", 2270 "commander": "2.17.1",
2897 "denodeify": "1.2.1", 2271 "denodeify": "1.2.1",
2898 "glob": "7.1.2", 2272 "glob": "7.1.2",
2899 "lodash": "4.17.10", 2273 "lodash": "4.17.10",
@@ -2909,17 +2283,6 @@
2909 "vso-node-api": "6.1.2-preview", 2283 "vso-node-api": "6.1.2-preview",
2910 "yauzl": "2.10.0", 2284 "yauzl": "2.10.0",
2911 "yazl": "2.4.3" 2285 "yazl": "2.4.3"
2912 },
2913 "dependencies": {
2914 "tmp": {
2915 "version": "0.0.29",
2916 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
2917 "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
2918 "dev": true,
2919 "requires": {
2920 "os-tmpdir": "1.0.2"
2921 }
2922 }
2923 } 2286 }
2924 }, 2287 },
2925 "vscode": { 2288 "vscode": {
@@ -2939,11 +2302,38 @@
2939 "mocha": "4.1.0", 2302 "mocha": "4.1.0",
2940 "request": "2.87.0", 2303 "request": "2.87.0",
2941 "semver": "5.5.0", 2304 "semver": "5.5.0",
2942 "source-map-support": "0.5.6", 2305 "source-map-support": "0.5.8",
2943 "url-parse": "1.4.3", 2306 "url-parse": "1.4.3",
2944 "vinyl-source-stream": "1.1.2" 2307 "vinyl-source-stream": "1.1.2"
2945 } 2308 }
2946 }, 2309 },
2310 "vscode-jsonrpc": {
2311 "version": "3.6.2",
2312 "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.6.2.tgz",
2313 "integrity": "sha512-T24Jb5V48e4VgYliUXMnZ379ItbrXgOimweKaJshD84z+8q7ZOZjJan0MeDe+Ugb+uqERDVV8SBmemaGMSMugA=="
2314 },
2315 "vscode-languageclient": {
2316 "version": "4.4.0",
2317 "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-4.4.0.tgz",
2318 "integrity": "sha512-sXBwIcwG4W5MjnDAfXf0hM5ErOcXxEBlix6QJb5ijf0gtecYygrMAqv8hag7sEg/jCCOKQdXJ4K1iZL3GZcJZg==",
2319 "requires": {
2320 "vscode-languageserver-protocol": "3.10.0"
2321 }
2322 },
2323 "vscode-languageserver-protocol": {
2324 "version": "3.10.0",
2325 "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.10.0.tgz",
2326 "integrity": "sha512-PNNmKM0IcQPRiY1oUIxfwseBvxS5Sa5aZUpTcq/qsXWclnl8FFNs8oCCoAtyLhBXnuJvybWUNafiA78y0unJDA==",
2327 "requires": {
2328 "vscode-jsonrpc": "3.6.2",
2329 "vscode-languageserver-types": "3.10.0"
2330 }
2331 },
2332 "vscode-languageserver-types": {
2333 "version": "3.10.0",
2334 "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.10.0.tgz",
2335 "integrity": "sha512-vxmCsVZGwq8X40SuLP8Ix7V0rq5V/7iQUjRVe2Oxm+TbmjxtjK4dpHHXQCUawjA4fhPA9FwjSRbDhbvQmYCfMw=="
2336 },
2947 "vso-node-api": { 2337 "vso-node-api": {
2948 "version": "6.1.2-preview", 2338 "version": "6.1.2-preview",
2949 "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", 2339 "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz",
@@ -2956,29 +2346,6 @@
2956 "underscore": "1.9.1" 2346 "underscore": "1.9.1"
2957 } 2347 }
2958 }, 2348 },
2959 "window-size": {
2960 "version": "0.1.0",
2961 "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
2962 "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
2963 "dev": true,
2964 "optional": true
2965 },
2966 "wordwrap": {
2967 "version": "0.0.3",
2968 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
2969 "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
2970 "dev": true
2971 },
2972 "wordwrapjs": {
2973 "version": "3.0.0",
2974 "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
2975 "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
2976 "dev": true,
2977 "requires": {
2978 "reduce-flatten": "1.0.1",
2979 "typical": "2.6.1"
2980 }
2981 },
2982 "wrappy": { 2349 "wrappy": {
2983 "version": "1.0.2", 2350 "version": "1.0.2",
2984 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2351 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -2991,19 +2358,6 @@
2991 "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 2358 "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
2992 "dev": true 2359 "dev": true
2993 }, 2360 },
2994 "yargs": {
2995 "version": "3.10.0",
2996 "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
2997 "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
2998 "dev": true,
2999 "optional": true,
3000 "requires": {
3001 "camelcase": "1.2.1",
3002 "cliui": "2.1.0",
3003 "decamelize": "1.2.0",
3004 "window-size": "0.1.0"
3005 }
3006 },
3007 "yauzl": { 2361 "yauzl": {
3008 "version": "2.10.0", 2362 "version": "2.10.0",
3009 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2363 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
diff --git a/code/package.json b/code/package.json
index 66c4f266f..1df932db1 100644
--- a/code/package.json
+++ b/code/package.json
@@ -1,56 +1,48 @@
1{ 1{
2 "name": "libsyntax-rust", 2 "name": "libsyntax-rust",
3 "displayName": "libsyntax-rust", 3 "displayName": "libsyntax-rust",
4 "description": "An experimental Rust plugin for VS Code based on libsyntax2", 4 "description": "An experimental Rust plugin for VS Code based on libsyntax2",
5 "license": "MIT", 5 "license": "MIT",
6 "repository": "http://github.com/matklad/libsyntax2/", 6 "repository": "http://github.com/matklad/libsyntax2/",
7 "version": "0.0.1", 7 "version": "0.0.1",
8 "publisher": "matklad", 8 "publisher": "matklad",
9 "engines": { 9 "engines": {
10 "vscode": "^1.18.0" 10 "vscode": "^1.25.0"
11 }, 11 },
12 "devDependencies": { 12 "scripts": {
13 "@types/node": "^6.0.112", 13 "compile": "tsc -p ./",
14 "neon-cli": "^0.2.0", 14 "postinstall": "node ./node_modules/vscode/bin/install"
15 "typescript": "^2.9.1", 15 },
16 "vsce": "^1.42.0", 16 "dependencies": {
17 "vscode": "^1.1.18" 17 "vscode-languageclient": "^4.3.0"
18 }, 18 },
19 "scripts": { 19 "devDependencies": {
20 "vscode:prepublish": "tsc -p ./", 20 "@types/node": "^7.0.56",
21 "compile": "tsc -watch -p ./", 21 "typescript": "^2.9.1",
22 "install": "neon build", 22 "vsce": "^1.42.0",
23 "postinstall": "node ./node_modules/vscode/bin/install" 23 "vscode": "^1.1.18"
24 }, 24 },
25 "main": "./out/src/main", 25 "main": "./out/src/extension",
26 "contributes": { 26 "activationEvents": [
27 "languages": [ 27 "onLanguage:rust"
28 { 28 ],
29 "id": "rust", 29 "contributes": {
30 "extensions": [ 30 "commands": [
31 ".rs" 31 {
32 ] 32 "command": "libsyntax-rust.syntaxTree",
33 } 33 "title": "Show Rust syntax tree"
34 ], 34 },
35 "commands": [ 35 {
36 { 36 "command": "libsyntax-rust.extendSelection",
37 "command": "libsyntax-rust.syntaxTree", 37 "title": "Rust Extend Selection"
38 "title": "Show Rust syntax tree" 38 }
39 }, 39 ],
40 { 40 "keybindings": [
41 "command": "libsyntax-rust.extendSelection", 41 {
42 "title": "Rust Extend Selection" 42 "command": "libsyntax-rust.extendSelection",
43 } 43 "key": "ctrl+w",
44 ], 44 "when": "editorTextFocus && editorLangId == rust"
45 "keybindings": [ 45 }
46 {
47 "command": "libsyntax-rust.extendSelection",
48 "key": "ctrl+w",
49 "when": "editorTextFocus && editorLangId == rust"
50 }
51 ]
52 },
53 "activationEvents": [
54 "onLanguage:rust"
55 ] 46 ]
47 }
56} 48}
diff --git a/code/src/extension.ts b/code/src/extension.ts
new file mode 100644
index 000000000..bdad1568a
--- /dev/null
+++ b/code/src/extension.ts
@@ -0,0 +1,194 @@
1'use strict';
2import * as vscode from 'vscode';
3import * as lc from 'vscode-languageclient'
4
5
6let client: lc.LanguageClient;
7
8let uris = {
9 syntaxTree: vscode.Uri.parse('libsyntax-rust://syntaxtree')
10}
11
12
13export function activate(context: vscode.ExtensionContext) {
14 let textDocumentContentProvider = new TextDocumentContentProvider()
15 let dispose = (disposable) => {
16 context.subscriptions.push(disposable);
17 }
18 let registerCommand = (name, f) => {
19 dispose(vscode.commands.registerCommand(name, f))
20 }
21
22 registerCommand('libsyntax-rust.syntaxTree', () => openDoc(uris.syntaxTree))
23 registerCommand('libsyntax-rust.extendSelection', async () => {
24 let editor = vscode.window.activeTextEditor
25 if (editor == null || editor.document.languageId != "rust") return
26 let request: ExtendSelectionParams = {
27 textDocument: { uri: editor.document.uri.toString() },
28 selections: editor.selections.map((s) => {
29 return { start: s.start, end: s.end };
30 })
31 }
32 let response = await client.sendRequest<ExtendSelectionResult>("m/extendSelection", request)
33 editor.selections = response.selections.map((range) => {
34 return new vscode.Selection(
35 new vscode.Position(range.start.line, range.start.character),
36 new vscode.Position(range.end.line, range.end.character),
37 )
38 })
39 })
40
41 dispose(vscode.workspace.registerTextDocumentContentProvider(
42 'libsyntax-rust',
43 textDocumentContentProvider
44 ))
45 startServer()
46 vscode.workspace.onDidChangeTextDocument((event: vscode.TextDocumentChangeEvent) => {
47 let doc = event.document
48 if (doc.languageId != "rust") return
49 // We need to order this after LS updates, but there's no API for that.
50 // Hence, good old setTimeout.
51 setTimeout(() => {
52 textDocumentContentProvider.eventEmitter.fire(uris.syntaxTree)
53 }, 10)
54 }, null, context.subscriptions)
55}
56
57export function deactivate(): Thenable<void> {
58 if (!client) {
59 return undefined;
60 }
61 return client.stop();
62}
63
64function startServer() {
65 let run: lc.Executable = {
66 command: "m",
67 // args: ["run", "--package", "m"],
68 options: { cwd: "." }
69 }
70 let serverOptions: lc.ServerOptions = {
71 run,
72 debug: run
73 };
74
75 let clientOptions: lc.LanguageClientOptions = {
76 documentSelector: [{ scheme: 'file', language: 'rust' }],
77 };
78
79 client = new lc.LanguageClient(
80 'm',
81 'm languge server',
82 serverOptions,
83 clientOptions,
84 );
85 client.onReady().then(() => {
86 client.onNotification(
87 new lc.NotificationType("m/publishDecorations"),
88 (params: PublishDecorationsParams) => {
89 let editor = vscode.window.visibleTextEditors.find(
90 (editor) => editor.document.uri.toString() == params.uri
91 )
92 if (editor == null) return;
93 setHighlights(
94 editor,
95 params.decorations,
96 )
97 }
98 )
99 })
100 client.start();
101}
102
103async function openDoc(uri: vscode.Uri) {
104 let document = await vscode.workspace.openTextDocument(uri)
105 return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true)
106}
107
108class TextDocumentContentProvider implements vscode.TextDocumentContentProvider {
109 public eventEmitter = new vscode.EventEmitter<vscode.Uri>()
110 public syntaxTree: string = "Not available"
111
112 public provideTextDocumentContent(uri: vscode.Uri): vscode.ProviderResult<string> {
113 let editor = vscode.window.activeTextEditor;
114 if (editor == null) return ""
115 let request: SyntaxTreeParams = {
116 textDocument: { uri: editor.document.uri.toString() }
117 };
118 return client.sendRequest<SyntaxTreeResult>("m/syntaxTree", request);
119 }
120
121 get onDidChange(): vscode.Event<vscode.Uri> {
122 return this.eventEmitter.event
123 }
124}
125
126
127const decorations = (() => {
128 const decor = (obj) => vscode.window.createTextEditorDecorationType({ color: obj })
129 return {
130 background: decor("#3F3F3F"),
131 error: vscode.window.createTextEditorDecorationType({
132 borderColor: "red",
133 borderStyle: "none none dashed none",
134 }),
135 comment: decor("#7F9F7F"),
136 string: decor("#CC9393"),
137 keyword: decor("#F0DFAF"),
138 function: decor("#93E0E3"),
139 parameter: decor("#94BFF3"),
140 builtin: decor("#DD6718"),
141 text: decor("#DCDCCC"),
142 attribute: decor("#BFEBBF"),
143 literal: decor("#DFAF8F"),
144 }
145})()
146
147function setHighlights(
148 editor: vscode.TextEditor,
149 highlihgs: Array<Decoration>
150) {
151 let byTag = {}
152 for (let tag in decorations) {
153 byTag[tag] = []
154 }
155
156 for (let d of highlihgs) {
157 if (!byTag[d.tag]) {
158 console.log(`unknown tag ${d.tag}`)
159 continue
160 }
161 byTag[d.tag].push(d.range)
162 }
163
164 for (let tag in byTag) {
165 let dec = decorations[tag]
166 let ranges = byTag[tag]
167 editor.setDecorations(dec, ranges)
168 }
169}
170
171interface SyntaxTreeParams {
172 textDocument: lc.TextDocumentIdentifier;
173}
174
175type SyntaxTreeResult = string
176
177interface ExtendSelectionParams {
178 textDocument: lc.TextDocumentIdentifier;
179 selections: lc.Range[];
180}
181
182interface ExtendSelectionResult {
183 selections: lc.Range[];
184}
185
186interface PublishDecorationsParams {
187 uri: string,
188 decorations: Decoration[],
189}
190
191interface Decoration {
192 range: lc.Range,
193 tag: string,
194}
diff --git a/code/src/main.ts b/code/src/main.ts
deleted file mode 100644
index 72bef7061..000000000
--- a/code/src/main.ts
+++ /dev/null
@@ -1,208 +0,0 @@
1'use strict'
2import * as vscode from 'vscode'
3
4const backend = require("../../native")
5
6let docToSyntax;
7
8let uris = {
9 syntaxTree: vscode.Uri.parse('libsyntax-rust://syntaxtree')
10}
11
12
13export function activate(context: vscode.ExtensionContext) {
14 let textDocumentContentProvider = new TextDocumentContentProvider()
15 let dispose = (disposable) => {
16 context.subscriptions.push(disposable);
17 }
18
19 let registerCommand = (name, f) => {
20 dispose(vscode.commands.registerCommand(name, f))
21 }
22
23 docToSyntax = documentToFile(context.subscriptions, () => {
24 let emitter = textDocumentContentProvider.eventEmitter
25 emitter.fire(uris.syntaxTree)
26 let syntax = activeSyntax()
27 setHighlights(vscode.window.activeTextEditor, syntax.highlight())
28 })
29
30
31 dispose(vscode.workspace.registerTextDocumentContentProvider(
32 'libsyntax-rust',
33 textDocumentContentProvider
34 ))
35
36 registerCommand('libsyntax-rust.syntaxTree', () => openDoc(uris.syntaxTree))
37 registerCommand('libsyntax-rust.extendSelection', () => {
38 let editor = vscode.window.activeTextEditor
39 let file = activeSyntax()
40 if (editor == null || file == null) return
41 editor.selections = editor.selections.map((s) => {
42 let range = file.extendSelection(s)
43 if (range == null) return null
44 return new vscode.Selection(range.start, range.end)
45 })
46 })
47}
48
49export function deactivate() { }
50
51export class Syntax {
52 imp;
53 doc: vscode.TextDocument;
54
55 constructor(imp, doc: vscode.TextDocument) {
56 this.imp = imp
57 this.doc = doc
58 }
59
60 syntaxTree(): string { return this.imp.syntaxTree() }
61 highlight(): Array<[number, number, string]> { return this.imp.highlight() }
62 extendSelection(range: vscode.Range): vscode.Range {
63 let range_ = fromVsRange(this.doc, range);
64 let extRange = this.imp.extendSelection(range_[0], range_[1]);
65 return toVsRange(this.doc, extRange);
66 }
67}
68
69
70function activeDoc() {
71 return vscode.window.activeTextEditor.document
72}
73
74function activeSyntax(): Syntax {
75 let doc = activeDoc()
76 if (doc == null) return null
77 return docToSyntax(doc)
78}
79
80async function openDoc(uri: vscode.Uri) {
81 let document = await vscode.workspace.openTextDocument(uri)
82 return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true)
83}
84
85function documentToFile(disposables: vscode.Disposable[], onChange) {
86 let docs = {}
87 function update(doc: vscode.TextDocument, file) {
88 let key = doc.uri.toString()
89 if (file == null) {
90 delete docs[key]
91 } else {
92 docs[key] = file
93 }
94 onChange(doc)
95 }
96 function get(doc: vscode.TextDocument) {
97 return docs[doc.uri.toString()]
98 }
99
100 function isKnownDoc(doc: vscode.TextDocument) {
101 return doc.fileName.endsWith('.rs')
102 }
103
104 function createFile(text: String) {
105 console.time("parsing")
106 let res = new backend.RustFile(text);
107 console.timeEnd("parsing")
108 return res
109 }
110
111 vscode.workspace.onDidChangeTextDocument((event: vscode.TextDocumentChangeEvent) => {
112 let doc = event.document
113 if (!isKnownDoc(event.document)) return
114 update(doc, null)
115 }, null, disposables)
116
117 vscode.workspace.onDidOpenTextDocument((doc: vscode.TextDocument) => {
118 if (!isKnownDoc(doc)) return
119 update(doc, createFile(doc.getText()))
120 }, null, disposables)
121
122 vscode.workspace.onDidCloseTextDocument((doc: vscode.TextDocument) => {
123 update(doc, null)
124 }, null, disposables)
125
126 return (doc: vscode.TextDocument) => {
127 if (!isKnownDoc(doc)) return null
128
129 if (!get(doc)) {
130 update(doc, createFile(doc.getText()))
131 }
132 let imp = get(doc)
133 return new Syntax(imp, doc)
134 }
135}
136
137export class TextDocumentContentProvider implements vscode.TextDocumentContentProvider {
138 public eventEmitter = new vscode.EventEmitter<vscode.Uri>()
139 public syntaxTree: string = "Not available"
140
141 public provideTextDocumentContent(uri: vscode.Uri): vscode.ProviderResult<string> {
142 let syntax = activeSyntax()
143 if (syntax == null) return
144 if (uri.toString() == uris.syntaxTree.toString()) {
145 return syntax.syntaxTree()
146 }
147 }
148
149 get onDidChange(): vscode.Event<vscode.Uri> {
150 return this.eventEmitter.event
151 }
152}
153
154const decorations = (() => {
155 const decor = (obj) => vscode.window.createTextEditorDecorationType({ color: obj })
156 return {
157 background: decor("#3F3F3F"),
158 error: vscode.window.createTextEditorDecorationType({
159 borderColor: "red",
160 borderStyle: "none none dashed none",
161 }),
162 comment: decor("#7F9F7F"),
163 string: decor("#CC9393"),
164 keyword: decor("#F0DFAF"),
165 function: decor("#93E0E3"),
166 parameter: decor("#94BFF3"),
167 builtin: decor("#DD6718"),
168 text: decor("#DCDCCC"),
169 attribute: decor("#BFEBBF"),
170 literal: decor("#DFAF8F"),
171 }
172})()
173
174function setHighlights(
175 editor: vscode.TextEditor,
176 highlihgs: Array<[number, number, string]>
177) {
178 let byTag = {}
179 for (let tag in decorations) {
180 byTag[tag] = []
181 }
182
183 for (let [start, end, tag] of highlihgs) {
184 if (!byTag[tag]) {
185 console.log(`unknown tag ${tag}`)
186 continue
187 }
188 let range = toVsRange(editor.document, [start, end])
189 byTag[tag].push(range)
190 }
191
192 for (let tag in byTag) {
193 let dec = decorations[tag]
194 let ranges = byTag[tag]
195 editor.setDecorations(dec, ranges)
196 }
197}
198
199export function toVsRange(doc: vscode.TextDocument, range: [number, number]): vscode.Range {
200 return new vscode.Range(
201 doc.positionAt(range[0]),
202 doc.positionAt(range[1]),
203 )
204}
205
206function fromVsRange(doc: vscode.TextDocument, range: vscode.Range): [number, number] {
207 return [doc.offsetAt(range.start), doc.offsetAt(range.end)]
208}
diff --git a/code/tsconfig.json b/code/tsconfig.json
index 053bd1c70..11c3126e0 100644
--- a/code/tsconfig.json
+++ b/code/tsconfig.json
@@ -7,5 +7,6 @@
7 "sourceMap": true, 7 "sourceMap": true,
8 "rootDir": "." 8 "rootDir": "."
9 }, 9 },
10 "include": [ "src/*.ts" ] 10 "include": [ "src" ],
11} \ No newline at end of file 11 "exclude": [ "node_modules" ]
12}