symbols-app-connect 3.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -0
- package/eslint.config.js +6 -0
- package/icon.png +0 -0
- package/out/extension.js +2814 -0
- package/package.json +103 -0
- package/src/data/components.ts +182 -0
- package/src/data/cssProperties.ts +187 -0
- package/src/data/designSystemValues.ts +294 -0
- package/src/data/domqlKeys.ts +321 -0
- package/src/data/elementMethods.ts +385 -0
- package/src/data/events.ts +368 -0
- package/src/extension.ts +82 -0
- package/src/providers/completionProvider.ts +595 -0
- package/src/providers/definitionProvider.ts +201 -0
- package/src/providers/hoverProvider.ts +162 -0
- package/src/providers/workspaceScanner.ts +98 -0
- package/symbols-app-connect-3.2.4.vsix +0 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
export interface EventInfo {
|
|
2
|
+
label: string
|
|
3
|
+
detail: string
|
|
4
|
+
documentation: string
|
|
5
|
+
snippet: string
|
|
6
|
+
isDomqlLifecycle: boolean
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const DOM_EVENTS: EventInfo[] = [
|
|
10
|
+
{
|
|
11
|
+
label: 'onClick',
|
|
12
|
+
detail: 'onClick: (event, el, state) => void',
|
|
13
|
+
documentation:
|
|
14
|
+
'Mouse click event handler.\n\n```js\nonClick: (event, el, state) => {\n event.preventDefault()\n state.update({ active: true })\n}\n```',
|
|
15
|
+
snippet: 'onClick: (event, el, state) => {\n ${1:}\n},',
|
|
16
|
+
isDomqlLifecycle: false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
label: 'onDblclick',
|
|
20
|
+
detail: 'onDblclick: (event, el, state) => void',
|
|
21
|
+
documentation: 'Double-click event handler.',
|
|
22
|
+
snippet: 'onDblclick: (event, el, state) => {\n ${1:}\n},',
|
|
23
|
+
isDomqlLifecycle: false
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
label: 'onChange',
|
|
27
|
+
detail: 'onChange: (event, el, state) => void',
|
|
28
|
+
documentation:
|
|
29
|
+
'Input change event handler. Fires when value commits (on blur for text inputs, immediately for checkboxes/selects).\n\n```js\nonChange: (event, el, state) => {\n state.update({ value: event.target.value })\n}\n```',
|
|
30
|
+
snippet: 'onChange: (event, el, state) => {\n state.update({ ${1:value}: event.target.value })\n},',
|
|
31
|
+
isDomqlLifecycle: false
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
label: 'onInput',
|
|
35
|
+
detail: 'onInput: (event, el, state) => void',
|
|
36
|
+
documentation:
|
|
37
|
+
'Input event handler. Fires on every keystroke.\n\n```js\nonInput: (event, el, state) => {\n state.update({ value: event.target.value })\n}\n```',
|
|
38
|
+
snippet: 'onInput: (event, el, state) => {\n state.update({ ${1:value}: event.target.value })\n},',
|
|
39
|
+
isDomqlLifecycle: false
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: 'onSubmit',
|
|
43
|
+
detail: 'onSubmit: (event, el, state) => void',
|
|
44
|
+
documentation:
|
|
45
|
+
'Form submit event handler.\n\n```js\nonSubmit: (event, el, state) => {\n event.preventDefault()\n el.call("submitForm", state)\n}\n```',
|
|
46
|
+
snippet: 'onSubmit: (event, el, state) => {\n event.preventDefault()\n ${1:}\n},',
|
|
47
|
+
isDomqlLifecycle: false
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
label: 'onKeydown',
|
|
51
|
+
detail: 'onKeydown: (event, el, state) => void',
|
|
52
|
+
documentation:
|
|
53
|
+
'Keydown event handler.\n\n```js\nonKeydown: (event, el, state) => {\n if (event.key === "Enter") el.call("submit")\n if (event.key === "Escape") state.update({ open: false })\n}\n```',
|
|
54
|
+
snippet: 'onKeydown: (event, el, state) => {\n if (event.key === "${1:Enter}") ${2:}\n},',
|
|
55
|
+
isDomqlLifecycle: false
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: 'onKeyup',
|
|
59
|
+
detail: 'onKeyup: (event, el, state) => void',
|
|
60
|
+
documentation: 'Keyup event handler.',
|
|
61
|
+
snippet: 'onKeyup: (event, el, state) => {\n ${1:}\n},',
|
|
62
|
+
isDomqlLifecycle: false
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
label: 'onKeypress',
|
|
66
|
+
detail: 'onKeypress: (event, el, state) => void',
|
|
67
|
+
documentation: 'Keypress event handler (deprecated, prefer onKeydown).',
|
|
68
|
+
snippet: 'onKeypress: (event, el, state) => {\n ${1:}\n},',
|
|
69
|
+
isDomqlLifecycle: false
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
label: 'onFocus',
|
|
73
|
+
detail: 'onFocus: (event, el, state) => void',
|
|
74
|
+
documentation: 'Focus event handler.',
|
|
75
|
+
snippet: 'onFocus: (event, el, state) => {\n ${1:}\n},',
|
|
76
|
+
isDomqlLifecycle: false
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
label: 'onBlur',
|
|
80
|
+
detail: 'onBlur: (event, el, state) => void',
|
|
81
|
+
documentation: 'Blur (focus lost) event handler.',
|
|
82
|
+
snippet: 'onBlur: (event, el, state) => {\n ${1:}\n},',
|
|
83
|
+
isDomqlLifecycle: false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
label: 'onFocusin',
|
|
87
|
+
detail: 'onFocusin: (event, el, state) => void',
|
|
88
|
+
documentation: 'Focusin event (bubbles, unlike focus).',
|
|
89
|
+
snippet: 'onFocusin: (event, el, state) => {\n ${1:}\n},',
|
|
90
|
+
isDomqlLifecycle: false
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
label: 'onFocusout',
|
|
94
|
+
detail: 'onFocusout: (event, el, state) => void',
|
|
95
|
+
documentation: 'Focusout event (bubbles, unlike blur).',
|
|
96
|
+
snippet: 'onFocusout: (event, el, state) => {\n ${1:}\n},',
|
|
97
|
+
isDomqlLifecycle: false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
label: 'onMouseover',
|
|
101
|
+
detail: 'onMouseover: (event, el, state) => void',
|
|
102
|
+
documentation: 'Mouseover event handler (fires on children too).',
|
|
103
|
+
snippet: 'onMouseover: (event, el, state) => {\n ${1:}\n},',
|
|
104
|
+
isDomqlLifecycle: false
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
label: 'onMouseout',
|
|
108
|
+
detail: 'onMouseout: (event, el, state) => void',
|
|
109
|
+
documentation: 'Mouseout event handler.',
|
|
110
|
+
snippet: 'onMouseout: (event, el, state) => {\n ${1:}\n},',
|
|
111
|
+
isDomqlLifecycle: false
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
label: 'onMouseenter',
|
|
115
|
+
detail: 'onMouseenter: (event, el, state) => void',
|
|
116
|
+
documentation: 'Mouseenter event (does not bubble).',
|
|
117
|
+
snippet: 'onMouseenter: (event, el, state) => {\n ${1:}\n},',
|
|
118
|
+
isDomqlLifecycle: false
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
label: 'onMouseleave',
|
|
122
|
+
detail: 'onMouseleave: (event, el, state) => void',
|
|
123
|
+
documentation: 'Mouseleave event (does not bubble).',
|
|
124
|
+
snippet: 'onMouseleave: (event, el, state) => {\n ${1:}\n},',
|
|
125
|
+
isDomqlLifecycle: false
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
label: 'onMousedown',
|
|
129
|
+
detail: 'onMousedown: (event, el, state) => void',
|
|
130
|
+
documentation: 'Mousedown event handler.',
|
|
131
|
+
snippet: 'onMousedown: (event, el, state) => {\n ${1:}\n},',
|
|
132
|
+
isDomqlLifecycle: false
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
label: 'onMouseup',
|
|
136
|
+
detail: 'onMouseup: (event, el, state) => void',
|
|
137
|
+
documentation: 'Mouseup event handler.',
|
|
138
|
+
snippet: 'onMouseup: (event, el, state) => {\n ${1:}\n},',
|
|
139
|
+
isDomqlLifecycle: false
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
label: 'onWheel',
|
|
143
|
+
detail: 'onWheel: (event, el, state) => void',
|
|
144
|
+
documentation: 'Wheel/scroll event handler.',
|
|
145
|
+
snippet: 'onWheel: (event, el, state) => {\n ${1:}\n},',
|
|
146
|
+
isDomqlLifecycle: false
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
label: 'onScroll',
|
|
150
|
+
detail: 'onScroll: (event, el, state) => void',
|
|
151
|
+
documentation: 'Scroll event handler.',
|
|
152
|
+
snippet: 'onScroll: (event, el, state) => {\n ${1:}\n},',
|
|
153
|
+
isDomqlLifecycle: false
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
label: 'onContextmenu',
|
|
157
|
+
detail: 'onContextmenu: (event, el, state) => void',
|
|
158
|
+
documentation: 'Context menu (right-click) event handler.',
|
|
159
|
+
snippet: 'onContextmenu: (event, el, state) => {\n event.preventDefault()\n ${1:}\n},',
|
|
160
|
+
isDomqlLifecycle: false
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
label: 'onDrag',
|
|
164
|
+
detail: 'onDrag: (event, el, state) => void',
|
|
165
|
+
documentation: 'Drag event handler.',
|
|
166
|
+
snippet: 'onDrag: (event, el, state) => {\n ${1:}\n},',
|
|
167
|
+
isDomqlLifecycle: false
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
label: 'onDragstart',
|
|
171
|
+
detail: 'onDragstart: (event, el, state) => void',
|
|
172
|
+
documentation: 'Dragstart event handler.',
|
|
173
|
+
snippet: 'onDragstart: (event, el, state) => {\n ${1:}\n},',
|
|
174
|
+
isDomqlLifecycle: false
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
label: 'onDragend',
|
|
178
|
+
detail: 'onDragend: (event, el, state) => void',
|
|
179
|
+
documentation: 'Dragend event handler.',
|
|
180
|
+
snippet: 'onDragend: (event, el, state) => {\n ${1:}\n},',
|
|
181
|
+
isDomqlLifecycle: false
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
label: 'onDragover',
|
|
185
|
+
detail: 'onDragover: (event, el, state) => void',
|
|
186
|
+
documentation: 'Dragover event (fires on drop target).',
|
|
187
|
+
snippet: 'onDragover: (event, el, state) => {\n event.preventDefault()\n ${1:}\n},',
|
|
188
|
+
isDomqlLifecycle: false
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
label: 'onDragenter',
|
|
192
|
+
detail: 'onDragenter: (event, el, state) => void',
|
|
193
|
+
documentation: 'Dragenter event (fires when dragged element enters drop target).',
|
|
194
|
+
snippet: 'onDragenter: (event, el, state) => {\n ${1:}\n},',
|
|
195
|
+
isDomqlLifecycle: false
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
label: 'onDragleave',
|
|
199
|
+
detail: 'onDragleave: (event, el, state) => void',
|
|
200
|
+
documentation: 'Dragleave event.',
|
|
201
|
+
snippet: 'onDragleave: (event, el, state) => {\n ${1:}\n},',
|
|
202
|
+
isDomqlLifecycle: false
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
label: 'onDrop',
|
|
206
|
+
detail: 'onDrop: (event, el, state) => void',
|
|
207
|
+
documentation: 'Drop event handler.',
|
|
208
|
+
snippet: 'onDrop: (event, el, state) => {\n event.preventDefault()\n ${1:}\n},',
|
|
209
|
+
isDomqlLifecycle: false
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
label: 'onTouchstart',
|
|
213
|
+
detail: 'onTouchstart: (event, el, state) => void',
|
|
214
|
+
documentation: 'Touch start event handler.',
|
|
215
|
+
snippet: 'onTouchstart: (event, el, state) => {\n ${1:}\n},',
|
|
216
|
+
isDomqlLifecycle: false
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
label: 'onTouchend',
|
|
220
|
+
detail: 'onTouchend: (event, el, state) => void',
|
|
221
|
+
documentation: 'Touch end event handler.',
|
|
222
|
+
snippet: 'onTouchend: (event, el, state) => {\n ${1:}\n},',
|
|
223
|
+
isDomqlLifecycle: false
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
label: 'onTouchmove',
|
|
227
|
+
detail: 'onTouchmove: (event, el, state) => void',
|
|
228
|
+
documentation: 'Touch move event handler.',
|
|
229
|
+
snippet: 'onTouchmove: (event, el, state) => {\n ${1:}\n},',
|
|
230
|
+
isDomqlLifecycle: false
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
label: 'onResize',
|
|
234
|
+
detail: 'onResize: (event, el, state) => void',
|
|
235
|
+
documentation: 'Resize event handler.',
|
|
236
|
+
snippet: 'onResize: (event, el, state) => {\n ${1:}\n},',
|
|
237
|
+
isDomqlLifecycle: false
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
label: 'onPointerdown',
|
|
241
|
+
detail: 'onPointerdown: (event, el, state) => void',
|
|
242
|
+
documentation: 'Pointer down event handler (touch + mouse unified).',
|
|
243
|
+
snippet: 'onPointerdown: (event, el, state) => {\n ${1:}\n},',
|
|
244
|
+
isDomqlLifecycle: false
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
label: 'onPointerup',
|
|
248
|
+
detail: 'onPointerup: (event, el, state) => void',
|
|
249
|
+
documentation: 'Pointer up event handler.',
|
|
250
|
+
snippet: 'onPointerup: (event, el, state) => {\n ${1:}\n},',
|
|
251
|
+
isDomqlLifecycle: false
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
label: 'onPointermove',
|
|
255
|
+
detail: 'onPointermove: (event, el, state) => void',
|
|
256
|
+
documentation: 'Pointer move event handler.',
|
|
257
|
+
snippet: 'onPointermove: (event, el, state) => {\n ${1:}\n},',
|
|
258
|
+
isDomqlLifecycle: false
|
|
259
|
+
}
|
|
260
|
+
]
|
|
261
|
+
|
|
262
|
+
export const DOMQL_LIFECYCLE_EVENTS: EventInfo[] = [
|
|
263
|
+
{
|
|
264
|
+
label: 'onRender',
|
|
265
|
+
detail: 'onRender: (el, state) => void',
|
|
266
|
+
documentation:
|
|
267
|
+
'Fires after the element is rendered into the DOM. Ideal for setup, data fetching, or third-party library initialization.\n\n```js\nonRender: async (el, state) => {\n const data = await el.call("fetchData", el.props.id)\n state.update({ data, loading: false })\n}\n```',
|
|
268
|
+
snippet: 'onRender: async (el, state) => {\n ${1:}\n},',
|
|
269
|
+
isDomqlLifecycle: true
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
label: 'onInit',
|
|
273
|
+
detail: 'onInit: (el, state) => void',
|
|
274
|
+
documentation:
|
|
275
|
+
'Fires before the element renders. Used for early setup before DOM creation.',
|
|
276
|
+
snippet: 'onInit: (el, state) => {\n ${1:}\n},',
|
|
277
|
+
isDomqlLifecycle: true
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
label: 'onUpdate',
|
|
281
|
+
detail: 'onUpdate: (el, state) => void',
|
|
282
|
+
documentation:
|
|
283
|
+
'Fires after any element update (props or state). Receives the updated element.',
|
|
284
|
+
snippet: 'onUpdate: (el, state) => {\n ${1:}\n},',
|
|
285
|
+
isDomqlLifecycle: true
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
label: 'onStateUpdate',
|
|
289
|
+
detail: 'onStateUpdate: (el, state) => void',
|
|
290
|
+
documentation:
|
|
291
|
+
'Fires specifically after state updates. More focused than `onUpdate`.\n\n```js\nonStateUpdate: (el, state) => {\n if (state.active) el.node.focus()\n}\n```',
|
|
292
|
+
snippet: 'onStateUpdate: (el, state) => {\n ${1:}\n},',
|
|
293
|
+
isDomqlLifecycle: true
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
label: 'onCreate',
|
|
297
|
+
detail: 'onCreate: (el, state) => void',
|
|
298
|
+
documentation: 'Fires when the element is fully created (after children are created).',
|
|
299
|
+
snippet: 'onCreate: (el, state) => {\n ${1:}\n},',
|
|
300
|
+
isDomqlLifecycle: true
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
label: 'onDone',
|
|
304
|
+
detail: 'onDone: (el, state) => void',
|
|
305
|
+
documentation: 'Fires when the element creation cycle is complete.',
|
|
306
|
+
snippet: 'onDone: (el, state) => {\n ${1:}\n},',
|
|
307
|
+
isDomqlLifecycle: true
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
label: 'onComplete',
|
|
311
|
+
detail: 'onComplete: (el, state) => void',
|
|
312
|
+
documentation: 'Fires when the full element tree is complete.',
|
|
313
|
+
snippet: 'onComplete: (el, state) => {\n ${1:}\n},',
|
|
314
|
+
isDomqlLifecycle: true
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
label: 'onStateInit',
|
|
318
|
+
detail: 'onStateInit: (el, state) => void',
|
|
319
|
+
documentation: 'Fires when state is initialized for the first time.',
|
|
320
|
+
snippet: 'onStateInit: (el, state) => {\n ${1:}\n},',
|
|
321
|
+
isDomqlLifecycle: true
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
label: 'onStateCreated',
|
|
325
|
+
detail: 'onStateCreated: (el, state) => void',
|
|
326
|
+
documentation: 'Fires right after state object creation.',
|
|
327
|
+
snippet: 'onStateCreated: (el, state) => {\n ${1:}\n},',
|
|
328
|
+
isDomqlLifecycle: true
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
label: 'onBeforeStateUpdate',
|
|
332
|
+
detail: 'onBeforeStateUpdate: (el, state) => void',
|
|
333
|
+
documentation: 'Fires before a state update is applied.',
|
|
334
|
+
snippet: 'onBeforeStateUpdate: (el, state) => {\n ${1:}\n},',
|
|
335
|
+
isDomqlLifecycle: true
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
label: 'onBeforeUpdate',
|
|
339
|
+
detail: 'onBeforeUpdate: (el, state) => void',
|
|
340
|
+
documentation: 'Fires before an element update.',
|
|
341
|
+
snippet: 'onBeforeUpdate: (el, state) => {\n ${1:}\n},',
|
|
342
|
+
isDomqlLifecycle: true
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
label: 'onBeforeClassAssign',
|
|
346
|
+
detail: 'onBeforeClassAssign: (el, state) => void',
|
|
347
|
+
documentation: 'Fires before CSS classes are assigned to the element.',
|
|
348
|
+
snippet: 'onBeforeClassAssign: (el, state) => {\n ${1:}\n},',
|
|
349
|
+
isDomqlLifecycle: true
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
label: 'onAttachNode',
|
|
353
|
+
detail: 'onAttachNode: (el, state) => void',
|
|
354
|
+
documentation: 'Fires when the DOM node is attached to parent.',
|
|
355
|
+
snippet: 'onAttachNode: (el, state) => {\n ${1:}\n},',
|
|
356
|
+
isDomqlLifecycle: true
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
label: 'onFrame',
|
|
360
|
+
detail: 'onFrame: (el, state) => void',
|
|
361
|
+
documentation:
|
|
362
|
+
'Fires on every animation frame. Element must have animation frame enabled.\n\n```js\nonFrame: (el) => {\n el.setNodeStyles({ transform: `translateX(${el.data.x}px)` })\n}\n```',
|
|
363
|
+
snippet: 'onFrame: (el, state) => {\n ${1:}\n},',
|
|
364
|
+
isDomqlLifecycle: true
|
|
365
|
+
}
|
|
366
|
+
]
|
|
367
|
+
|
|
368
|
+
export const ALL_EVENTS = [...DOM_EVENTS, ...DOMQL_LIFECYCLE_EVENTS]
|
package/src/extension.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as vscode from 'vscode'
|
|
2
|
+
import { DomqlCompletionProvider } from './providers/completionProvider'
|
|
3
|
+
import { DomqlHoverProvider } from './providers/hoverProvider'
|
|
4
|
+
import { DomqlDefinitionProvider } from './providers/definitionProvider'
|
|
5
|
+
import { invalidateCache } from './providers/workspaceScanner'
|
|
6
|
+
|
|
7
|
+
const LANGUAGES = ['javascript', 'typescript', 'javascriptreact', 'typescriptreact']
|
|
8
|
+
|
|
9
|
+
// Output channel for diagnostics
|
|
10
|
+
let output: vscode.OutputChannel
|
|
11
|
+
|
|
12
|
+
export function activate(context: vscode.ExtensionContext): void {
|
|
13
|
+
output = vscode.window.createOutputChannel('Symbols.app')
|
|
14
|
+
output.appendLine('Symbols.app extension activating...')
|
|
15
|
+
|
|
16
|
+
const completionProvider = new DomqlCompletionProvider()
|
|
17
|
+
const hoverProvider = new DomqlHoverProvider()
|
|
18
|
+
const definitionProvider = new DomqlDefinitionProvider()
|
|
19
|
+
|
|
20
|
+
for (const lang of LANGUAGES) {
|
|
21
|
+
const selector = { language: lang, scheme: 'file' }
|
|
22
|
+
|
|
23
|
+
context.subscriptions.push(
|
|
24
|
+
vscode.languages.registerCompletionItemProvider(
|
|
25
|
+
selector,
|
|
26
|
+
completionProvider,
|
|
27
|
+
'.', ' ', '\n', ',', ':', "'", '"'
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
context.subscriptions.push(
|
|
32
|
+
vscode.languages.registerHoverProvider(selector, hoverProvider)
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
context.subscriptions.push(
|
|
36
|
+
vscode.languages.registerDefinitionProvider(selector, definitionProvider)
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const watcher = vscode.workspace.createFileSystemWatcher('**/*.{js,ts,jsx,tsx}')
|
|
41
|
+
watcher.onDidChange(() => invalidateCache())
|
|
42
|
+
watcher.onDidCreate(() => invalidateCache())
|
|
43
|
+
watcher.onDidDelete(() => invalidateCache())
|
|
44
|
+
context.subscriptions.push(watcher)
|
|
45
|
+
|
|
46
|
+
context.subscriptions.push(
|
|
47
|
+
vscode.commands.registerCommand('symbolsApp.toggle', () => {
|
|
48
|
+
const config = vscode.workspace.getConfiguration('symbolsApp')
|
|
49
|
+
const current: boolean = config.get('enable', true)
|
|
50
|
+
config.update('enable', !current, vscode.ConfigurationTarget.Global)
|
|
51
|
+
vscode.window.showInformationMessage(
|
|
52
|
+
`Symbols.app ${!current ? 'enabled' : 'disabled'}`
|
|
53
|
+
)
|
|
54
|
+
})
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
context.subscriptions.push(
|
|
58
|
+
vscode.commands.registerCommand('symbolsApp.diagnose', () => {
|
|
59
|
+
output.show()
|
|
60
|
+
output.appendLine('--- Diagnostics ---')
|
|
61
|
+
output.appendLine(`Workspace folders: ${vscode.workspace.workspaceFolders?.map(f => f.uri.fsPath).join(', ')}`)
|
|
62
|
+
const editor = vscode.window.activeTextEditor
|
|
63
|
+
if (editor) {
|
|
64
|
+
output.appendLine(`Active file: ${editor.document.uri.fsPath}`)
|
|
65
|
+
output.appendLine(`Language: ${editor.document.languageId}`)
|
|
66
|
+
const text = editor.document.getText()
|
|
67
|
+
output.appendLine(`File length: ${text.length}`)
|
|
68
|
+
output.appendLine(`Has DOMQL import: ${/from\s+['"](@domql\/|domql|@symbo\.ls\/|smbls)/.test(text)}`)
|
|
69
|
+
output.appendLine(`Has extends/childExtends: ${/\b(extends|childExtends|childExtendsRecursive|onRender|onStateUpdate|onInit)\s*:/.test(text)}`)
|
|
70
|
+
output.appendLine(`Has design system props: ${/\b(flow|theme|round|boxSize|childExtend|widthRange|heightRange)\s*:\s*['"\`]/.test(text)}`)
|
|
71
|
+
output.appendLine(`Has component export: ${/export\s+(?:const|let|var)\s+[A-Z][a-zA-Z0-9]+\s*=\s*\{/.test(text)}`)
|
|
72
|
+
}
|
|
73
|
+
output.appendLine('--- End ---')
|
|
74
|
+
vscode.window.showInformationMessage('Symbols.app: Check Output panel (Symbols.app channel)')
|
|
75
|
+
})
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
output.appendLine('Symbols.app extension activated successfully')
|
|
79
|
+
vscode.window.showInformationMessage('Symbols.app Connect active')
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function deactivate(): void {}
|