@neo4j-cypher/react-codemirror 2.0.0-next.4 → 2.0.0-next.40
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/CHANGELOG.md +350 -0
- package/README.md +3 -2
- package/dist/src/CypherEditor.d.ts +243 -0
- package/dist/src/CypherEditor.js +513 -0
- package/dist/src/CypherEditor.js.map +1 -0
- package/dist/src/CypherEditor.test.js +154 -0
- package/dist/src/CypherEditor.test.js.map +1 -0
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/constants.js +2 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/diffView.d.ts +13 -0
- package/dist/src/diffView.js +11 -0
- package/dist/src/diffView.js.map +1 -0
- package/dist/src/e2e_tests/autoCompletion.spec.js +335 -0
- package/dist/src/e2e_tests/autoCompletion.spec.js.map +1 -0
- package/dist/src/e2e_tests/configuration.spec.js +83 -0
- package/dist/src/e2e_tests/configuration.spec.js.map +1 -0
- package/dist/src/e2e_tests/debounce.spec.js +66 -0
- package/dist/src/e2e_tests/debounce.spec.js.map +1 -0
- package/dist/{types/e2e_tests/e2e-utils.d.ts → src/e2e_tests/e2eUtils.d.ts} +2 -0
- package/dist/src/e2e_tests/e2eUtils.js +79 -0
- package/dist/src/e2e_tests/e2eUtils.js.map +1 -0
- package/dist/src/e2e_tests/extraKeybindings.spec.js +43 -0
- package/dist/src/e2e_tests/extraKeybindings.spec.js.map +1 -0
- package/dist/src/e2e_tests/historyNavigation.spec.js +227 -0
- package/dist/src/e2e_tests/historyNavigation.spec.js.map +1 -0
- package/dist/src/e2e_tests/performanceTest.spec.d.ts +6 -0
- package/dist/src/e2e_tests/performanceTest.spec.js +97 -0
- package/dist/src/e2e_tests/performanceTest.spec.js.map +1 -0
- package/dist/src/e2e_tests/sanityChecks.spec.js +64 -0
- package/dist/src/e2e_tests/sanityChecks.spec.js.map +1 -0
- package/dist/src/e2e_tests/signatureHelp.spec.js +227 -0
- package/dist/src/e2e_tests/signatureHelp.spec.js.map +1 -0
- package/dist/src/e2e_tests/snippets.spec.js +14 -0
- package/dist/src/e2e_tests/snippets.spec.js.map +1 -0
- package/dist/src/e2e_tests/syntaxHighlighting.spec.d.ts +1 -0
- package/dist/src/e2e_tests/syntaxHighlighting.spec.js +90 -0
- package/dist/src/e2e_tests/syntaxHighlighting.spec.js.map +1 -0
- package/dist/src/e2e_tests/syntaxValidation.spec.d.ts +1 -0
- package/dist/src/e2e_tests/syntaxValidation.spec.js +129 -0
- package/dist/src/e2e_tests/syntaxValidation.spec.js.map +1 -0
- package/dist/src/editorActions.d.ts +17 -0
- package/dist/src/editorActions.js +194 -0
- package/dist/src/editorActions.js.map +1 -0
- package/dist/src/historyNavigation.js +163 -0
- package/dist/src/historyNavigation.js.map +1 -0
- package/dist/src/hostCallbacks.d.ts +9 -0
- package/dist/src/hostCallbacks.js +2 -0
- package/dist/src/hostCallbacks.js.map +1 -0
- package/dist/{types → src}/icons.d.ts +1 -1
- package/dist/src/icons.js +62 -0
- package/dist/src/icons.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/inlinePanel.d.ts +27 -0
- package/dist/src/inlinePanel.js +86 -0
- package/dist/src/inlinePanel.js.map +1 -0
- package/dist/src/lang-cypher/autocomplete.d.ts +6 -0
- package/dist/src/lang-cypher/autocomplete.js +116 -0
- package/dist/src/lang-cypher/autocomplete.js.map +1 -0
- package/dist/{types → src}/lang-cypher/constants.d.ts +13 -0
- package/dist/src/lang-cypher/constants.js +74 -0
- package/dist/src/lang-cypher/constants.js.map +1 -0
- package/dist/src/lang-cypher/contants.test.d.ts +1 -0
- package/dist/src/lang-cypher/contants.test.js +103 -0
- package/dist/src/lang-cypher/contants.test.js.map +1 -0
- package/dist/{types/lang-cypher/create-cypher-theme.d.ts → src/lang-cypher/createCypherTheme.d.ts} +12 -1
- package/dist/src/lang-cypher/createCypherTheme.js +202 -0
- package/dist/src/lang-cypher/createCypherTheme.js.map +1 -0
- package/dist/src/lang-cypher/langCypher.d.ts +14 -0
- package/dist/src/lang-cypher/langCypher.js +23 -0
- package/dist/src/lang-cypher/langCypher.js.map +1 -0
- package/dist/src/lang-cypher/lintWorker.mjs +2035 -0
- package/dist/src/lang-cypher/parser-adapter.d.ts +19 -0
- package/dist/src/lang-cypher/parser-adapter.js +112 -0
- package/dist/src/lang-cypher/parser-adapter.js.map +1 -0
- package/dist/src/lang-cypher/signatureHelp.d.ts +4 -0
- package/dist/src/lang-cypher/signatureHelp.js +108 -0
- package/dist/src/lang-cypher/signatureHelp.js.map +1 -0
- package/dist/{types/lang-cypher/syntax-validation.d.ts → src/lang-cypher/syntaxValidation.d.ts} +2 -1
- package/dist/src/lang-cypher/syntaxValidation.js +60 -0
- package/dist/src/lang-cypher/syntaxValidation.js.map +1 -0
- package/dist/src/lang-cypher/themeIcons.js +22 -0
- package/dist/src/lang-cypher/themeIcons.js.map +1 -0
- package/dist/src/lang-cypher/utils.d.ts +2 -0
- package/dist/src/lang-cypher/utils.js +10 -0
- package/dist/src/lang-cypher/utils.js.map +1 -0
- package/dist/src/ndlTokensCopy.d.ts +570 -0
- package/dist/src/ndlTokensCopy.js +571 -0
- package/dist/src/ndlTokensCopy.js.map +1 -0
- package/dist/src/ndlTokensCopy.test.d.ts +1 -0
- package/dist/src/ndlTokensCopy.test.js +12 -0
- package/dist/src/ndlTokensCopy.test.js.map +1 -0
- package/dist/src/neo4jSetup.d.ts +6 -0
- package/dist/src/neo4jSetup.js +120 -0
- package/dist/src/neo4jSetup.js.map +1 -0
- package/dist/src/richClipboardCopier.d.ts +4 -0
- package/dist/src/richClipboardCopier.js +78 -0
- package/dist/src/richClipboardCopier.js.map +1 -0
- package/dist/src/richClipboardCopier.test.d.ts +1 -0
- package/dist/src/richClipboardCopier.test.js +53 -0
- package/dist/src/richClipboardCopier.test.js.map +1 -0
- package/dist/src/themes.d.ts +5 -0
- package/dist/src/themes.js +107 -0
- package/dist/src/themes.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +62 -62
- package/src/CypherEditor.test.tsx +203 -0
- package/src/CypherEditor.tsx +584 -48
- package/src/constants.ts +1 -0
- package/src/diffView.ts +24 -0
- package/src/e2e_tests/autoCompletion.spec.tsx +577 -0
- package/src/e2e_tests/configuration.spec.tsx +111 -0
- package/src/e2e_tests/debounce.spec.tsx +102 -0
- package/src/e2e_tests/{e2e-utils.ts → e2eUtils.ts} +41 -3
- package/src/e2e_tests/{extra-keybindings.spec.tsx → extraKeybindings.spec.tsx} +1 -3
- package/src/e2e_tests/{history-navigation.spec.tsx → historyNavigation.spec.tsx} +137 -18
- package/src/e2e_tests/performanceTest.spec.tsx +163 -0
- package/src/e2e_tests/{sanity-checks.spec.tsx → sanityChecks.spec.tsx} +28 -20
- package/src/e2e_tests/signatureHelp.spec.tsx +443 -0
- package/src/e2e_tests/snippets.spec.tsx +19 -0
- package/src/e2e_tests/{syntax-highlighting.spec.tsx → syntaxHighlighting.spec.tsx} +26 -24
- package/src/e2e_tests/syntaxValidation.spec.tsx +252 -0
- package/src/editorActions.ts +253 -0
- package/src/{history-navigation.ts → historyNavigation.ts} +1 -1
- package/src/hostCallbacks.ts +9 -0
- package/src/icons.ts +3 -0
- package/src/index.ts +4 -2
- package/src/inlinePanel.ts +140 -0
- package/src/lang-cypher/autocomplete.ts +98 -18
- package/src/lang-cypher/constants.ts +32 -0
- package/src/lang-cypher/contants.test.ts +7 -3
- package/src/lang-cypher/{create-cypher-theme.ts → createCypherTheme.ts} +85 -23
- package/src/lang-cypher/langCypher.ts +46 -0
- package/src/lang-cypher/lintWorker.mjs +2035 -0
- package/src/lang-cypher/parser-adapter.ts +145 -0
- package/src/lang-cypher/signatureHelp.ts +154 -0
- package/src/lang-cypher/syntaxValidation.ts +76 -0
- package/src/lang-cypher/utils.ts +9 -0
- package/src/{ndl-tokens-copy.test.ts → ndlTokensCopy.test.ts} +2 -1
- package/src/ndlTokensCopy.ts +570 -0
- package/src/{neo4j-setup.tsx → neo4jSetup.tsx} +78 -17
- package/src/richClipboardCopier.test.ts +65 -0
- package/src/richClipboardCopier.ts +99 -0
- package/src/themes.ts +61 -69
- package/src/viteEnv.d.ts +1 -0
- package/dist/cjs/index.cjs +0 -1441
- package/dist/cjs/index.cjs.map +0 -7
- package/dist/esm/index.mjs +0 -1464
- package/dist/esm/index.mjs.map +0 -7
- package/dist/types/CypherEditor.d.ts +0 -113
- package/dist/types/e2e_tests/mock-data.d.ts +0 -3779
- package/dist/types/index.d.ts +0 -4
- package/dist/types/lang-cypher/ParserAdapter.d.ts +0 -14
- package/dist/types/lang-cypher/autocomplete.d.ts +0 -3
- package/dist/types/lang-cypher/lang-cypher.d.ts +0 -7
- package/dist/types/ndl-tokens-copy.d.ts +0 -379
- package/dist/types/neo4j-setup.d.ts +0 -2
- package/dist/types/themes.d.ts +0 -11
- package/dist/types/tsconfig.tsbuildinfo +0 -1
- package/src/e2e_tests/auto-completion.spec.tsx +0 -232
- package/src/e2e_tests/mock-data.ts +0 -4310
- package/src/e2e_tests/performance-test.spec.tsx +0 -71
- package/src/e2e_tests/syntax-validation.spec.tsx +0 -156
- package/src/lang-cypher/ParserAdapter.ts +0 -92
- package/src/lang-cypher/lang-cypher.ts +0 -32
- package/src/lang-cypher/syntax-validation.ts +0 -24
- package/src/ndl-tokens-copy.ts +0 -379
- /package/dist/{types/e2e_tests/auto-completion.spec.d.ts → src/CypherEditor.test.d.ts} +0 -0
- /package/dist/{types/e2e_tests/extra-keybindings.spec.d.ts → src/e2e_tests/autoCompletion.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/history-navigation.spec.d.ts → src/e2e_tests/configuration.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/performance-test.spec.d.ts → src/e2e_tests/debounce.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/sanity-checks.spec.d.ts → src/e2e_tests/extraKeybindings.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/syntax-highlighting.spec.d.ts → src/e2e_tests/historyNavigation.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/syntax-validation.spec.d.ts → src/e2e_tests/sanityChecks.spec.d.ts} +0 -0
- /package/dist/{types/lang-cypher/contants.test.d.ts → src/e2e_tests/signatureHelp.spec.d.ts} +0 -0
- /package/dist/{types/ndl-tokens-copy.test.d.ts → src/e2e_tests/snippets.spec.d.ts} +0 -0
- /package/dist/{types/history-navigation.d.ts → src/historyNavigation.d.ts} +0 -0
- /package/dist/{types/lang-cypher/theme-icons.d.ts → src/lang-cypher/themeIcons.d.ts} +0 -0
- /package/src/lang-cypher/{theme-icons.ts → themeIcons.ts} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { StateEffect, type Extension } from '@codemirror/state';
|
|
2
|
+
import type { HostPortalCallbacks } from './hostCallbacks';
|
|
3
|
+
/** Lifecycle callbacks for an inline panel. See {@link HostPortalCallbacks}. */
|
|
4
|
+
export type InlinePanelCallbacks = HostPortalCallbacks;
|
|
5
|
+
type InlinePanelShowOptions = {
|
|
6
|
+
/** Document position the panel anchors to. */
|
|
7
|
+
pos: number;
|
|
8
|
+
/**
|
|
9
|
+
* Where to render the panel relative to the line at `pos`. `'above'`
|
|
10
|
+
* places it before the line, `'below'` after it.
|
|
11
|
+
*
|
|
12
|
+
* @default 'above'
|
|
13
|
+
*/
|
|
14
|
+
placement?: 'above' | 'below';
|
|
15
|
+
} & InlinePanelCallbacks;
|
|
16
|
+
type ShowPayload = InlinePanelShowOptions | null;
|
|
17
|
+
export type InlinePanelController = {
|
|
18
|
+
/** CodeMirror extension to register on the editor. */
|
|
19
|
+
extension: Extension;
|
|
20
|
+
/** Build an effect that mounts the panel with the given options. */
|
|
21
|
+
show: (options: InlinePanelShowOptions) => StateEffect<ShowPayload>;
|
|
22
|
+
/** Build an effect that unmounts the panel. */
|
|
23
|
+
hide: () => StateEffect<ShowPayload>;
|
|
24
|
+
updateCallbacks: (callbacks: InlinePanelCallbacks) => void;
|
|
25
|
+
};
|
|
26
|
+
export declare function createInlinePanelController(): InlinePanelController;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { StateEffect, StateField } from '@codemirror/state';
|
|
2
|
+
import { Decoration, EditorView, WidgetType, } from '@codemirror/view';
|
|
3
|
+
export function createInlinePanelController() {
|
|
4
|
+
const showEffect = StateEffect.define();
|
|
5
|
+
let callbacksRef = null;
|
|
6
|
+
class InlinePanelWidget extends WidgetType {
|
|
7
|
+
options;
|
|
8
|
+
resizeObserver = null;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
super();
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
toDOM(view) {
|
|
14
|
+
const container = document.createElement('div');
|
|
15
|
+
container.className = 'cm-inline-panel';
|
|
16
|
+
this.resizeObserver = new ResizeObserver(() => view.requestMeasure());
|
|
17
|
+
this.resizeObserver.observe(container);
|
|
18
|
+
callbacksRef?.onMount(container);
|
|
19
|
+
return container;
|
|
20
|
+
}
|
|
21
|
+
destroy() {
|
|
22
|
+
this.resizeObserver?.disconnect();
|
|
23
|
+
this.resizeObserver = null;
|
|
24
|
+
callbacksRef?.onUnmount();
|
|
25
|
+
}
|
|
26
|
+
eq(other) {
|
|
27
|
+
return (other.options.pos === this.options.pos &&
|
|
28
|
+
other.options.placement === this.options.placement);
|
|
29
|
+
}
|
|
30
|
+
ignoreEvent() {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const buildDecoration = (options) => Decoration.set([
|
|
35
|
+
Decoration.widget({
|
|
36
|
+
widget: new InlinePanelWidget(options),
|
|
37
|
+
block: true,
|
|
38
|
+
side: options.placement === 'below' ? 1 : -1,
|
|
39
|
+
}).range(options.pos),
|
|
40
|
+
]);
|
|
41
|
+
const readOptions = (decorations) => {
|
|
42
|
+
const widget = decorations.iter().value?.spec?.widget;
|
|
43
|
+
return widget instanceof InlinePanelWidget ? widget.options : null;
|
|
44
|
+
};
|
|
45
|
+
const field = StateField.define({
|
|
46
|
+
create() {
|
|
47
|
+
return Decoration.none;
|
|
48
|
+
},
|
|
49
|
+
update(decorations, transaction) {
|
|
50
|
+
for (const effect of transaction.effects) {
|
|
51
|
+
if (effect.is(showEffect)) {
|
|
52
|
+
return effect.value === null
|
|
53
|
+
? Decoration.none
|
|
54
|
+
: buildDecoration(effect.value);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Nothing to do when the panel is closed, or when the document is unchanged
|
|
58
|
+
if (decorations.size === 0 || !transaction.docChanged) {
|
|
59
|
+
return decorations.map(transaction.changes);
|
|
60
|
+
}
|
|
61
|
+
// Re-anchor manually because CodeMirror's default mapping silently drops
|
|
62
|
+
// block-widget decorations when their anchor line is deleted
|
|
63
|
+
const options = readOptions(decorations);
|
|
64
|
+
if (options === null) {
|
|
65
|
+
return decorations.map(transaction.changes);
|
|
66
|
+
}
|
|
67
|
+
const side = options.placement === 'below' ? 1 : -1;
|
|
68
|
+
const lineNumber = Math.min(transaction.startState.doc.lineAt(options.pos).number, transaction.newDoc.lines);
|
|
69
|
+
const line = transaction.newDoc.line(lineNumber);
|
|
70
|
+
return buildDecoration({
|
|
71
|
+
...options,
|
|
72
|
+
pos: side === 1 ? line.to : line.from,
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
provide: (f) => EditorView.decorations.from(f),
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
extension: field,
|
|
79
|
+
show: (options) => showEffect.of(options),
|
|
80
|
+
hide: () => showEffect.of(null),
|
|
81
|
+
updateCallbacks: (callbacks) => {
|
|
82
|
+
callbacksRef = callbacks;
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=inlinePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlinePanel.js","sourceRoot":"","sources":["../../src/inlinePanel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Completion, CompletionSource } from '@codemirror/autocomplete';
|
|
2
|
+
import type { CypherConfig } from './langCypher';
|
|
3
|
+
export declare const completionStyles: (completion: Completion & {
|
|
4
|
+
deprecated?: boolean;
|
|
5
|
+
}) => string;
|
|
6
|
+
export declare const cypherAutocomplete: (config: CypherConfig) => CompletionSource;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { snippet, } from '@codemirror/autocomplete';
|
|
2
|
+
import { shouldAutoCompleteYield } from '@neo4j-cypher/language-support';
|
|
3
|
+
import { CompletionItemKind, CompletionItemTag, } from 'vscode-languageserver-types';
|
|
4
|
+
import { getDocString } from './utils';
|
|
5
|
+
const completionKindToCodemirrorIcon = (c) => {
|
|
6
|
+
const map = {
|
|
7
|
+
[CompletionItemKind.Text]: 'Text',
|
|
8
|
+
[CompletionItemKind.Method]: 'Method',
|
|
9
|
+
[CompletionItemKind.Function]: 'Function',
|
|
10
|
+
[CompletionItemKind.Constructor]: 'Constructor',
|
|
11
|
+
[CompletionItemKind.Field]: 'Field',
|
|
12
|
+
[CompletionItemKind.Variable]: 'Variable',
|
|
13
|
+
[CompletionItemKind.Class]: 'Class',
|
|
14
|
+
[CompletionItemKind.Interface]: 'Interface',
|
|
15
|
+
[CompletionItemKind.Module]: 'Module',
|
|
16
|
+
[CompletionItemKind.Property]: 'Property',
|
|
17
|
+
[CompletionItemKind.Unit]: 'Unit',
|
|
18
|
+
[CompletionItemKind.Value]: 'Value',
|
|
19
|
+
[CompletionItemKind.Enum]: 'Enum',
|
|
20
|
+
[CompletionItemKind.Keyword]: 'Keyword',
|
|
21
|
+
[CompletionItemKind.Snippet]: 'Snippet',
|
|
22
|
+
[CompletionItemKind.Color]: 'Color',
|
|
23
|
+
[CompletionItemKind.File]: 'File',
|
|
24
|
+
[CompletionItemKind.Reference]: 'Reference',
|
|
25
|
+
[CompletionItemKind.Folder]: 'Folder',
|
|
26
|
+
[CompletionItemKind.EnumMember]: 'EnumMember',
|
|
27
|
+
[CompletionItemKind.Constant]: 'Constant',
|
|
28
|
+
[CompletionItemKind.Struct]: 'Struct',
|
|
29
|
+
// we're miss-using the enum here as there is no `Console` kind in the predefined list
|
|
30
|
+
[CompletionItemKind.Event]: 'Console',
|
|
31
|
+
[CompletionItemKind.Operator]: 'Operator',
|
|
32
|
+
[CompletionItemKind.TypeParameter]: 'TypeParameter',
|
|
33
|
+
};
|
|
34
|
+
return map[c];
|
|
35
|
+
};
|
|
36
|
+
export const completionStyles = (completion) => {
|
|
37
|
+
if (completion.deprecated) {
|
|
38
|
+
return 'cm-deprecated-element';
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export const cypherAutocomplete = (config) => (context) => {
|
|
45
|
+
const documentText = context.state.doc.toString();
|
|
46
|
+
const offset = context.pos;
|
|
47
|
+
const triggerCharacters = ['.', ':', '{', '$', ')', ']', '-', '<'];
|
|
48
|
+
const lastCharacter = documentText.at(offset - 1);
|
|
49
|
+
const yieldTriggered = shouldAutoCompleteYield(documentText, offset);
|
|
50
|
+
const lastWord = context.matchBefore(/\w*/);
|
|
51
|
+
const inWord = lastWord.from !== lastWord.to;
|
|
52
|
+
const shouldTriggerCompletion = inWord ||
|
|
53
|
+
context.explicit ||
|
|
54
|
+
triggerCharacters.includes(lastCharacter) ||
|
|
55
|
+
yieldTriggered;
|
|
56
|
+
if (config.useLightVersion && !context.explicit) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
if (!shouldTriggerCompletion) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const options = config.languageService.autocomplete(documentText, config.schema ?? {}, {
|
|
63
|
+
caretPosition: offset,
|
|
64
|
+
manual: context.explicit,
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
from: context.matchBefore(/(\w)*$/).from,
|
|
68
|
+
options: options.map((o) => {
|
|
69
|
+
let maybeInfo = {};
|
|
70
|
+
let emptyInfo = true;
|
|
71
|
+
const newDiv = document.createElement('div');
|
|
72
|
+
if (o.signature) {
|
|
73
|
+
const header = document.createElement('p');
|
|
74
|
+
header.setAttribute('class', 'cm-completionInfo-signature');
|
|
75
|
+
header.textContent = o.signature;
|
|
76
|
+
if (header.textContent.length > 0) {
|
|
77
|
+
emptyInfo = false;
|
|
78
|
+
newDiv.appendChild(header);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (o.documentation) {
|
|
82
|
+
const paragraph = document.createElement('p');
|
|
83
|
+
paragraph.textContent = getDocString(o.documentation);
|
|
84
|
+
if (paragraph.textContent.length > 0) {
|
|
85
|
+
emptyInfo = false;
|
|
86
|
+
newDiv.appendChild(paragraph);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!emptyInfo) {
|
|
90
|
+
maybeInfo = {
|
|
91
|
+
info: () => Promise.resolve(newDiv),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const deprecated = o.tags?.find((tag) => tag === CompletionItemTag.Deprecated) ?? false;
|
|
95
|
+
// The negative boost moves the deprecation down the list
|
|
96
|
+
// so we offer the user the completions that are
|
|
97
|
+
// deprecated the last
|
|
98
|
+
const maybeDeprecated = deprecated
|
|
99
|
+
? { boost: -99, deprecated: true }
|
|
100
|
+
: {};
|
|
101
|
+
return {
|
|
102
|
+
label: o.insertText ? o.insertText : o.label,
|
|
103
|
+
displayLabel: o.label,
|
|
104
|
+
type: completionKindToCodemirrorIcon(o.kind),
|
|
105
|
+
apply: o.kind === CompletionItemKind.Snippet
|
|
106
|
+
? // codemirror requires an empty snippet space to be able to tab out of the completion
|
|
107
|
+
snippet((o.insertText ?? o.label) + '${}')
|
|
108
|
+
: undefined,
|
|
109
|
+
detail: o.detail,
|
|
110
|
+
...maybeDeprecated,
|
|
111
|
+
...maybeInfo,
|
|
112
|
+
};
|
|
113
|
+
}),
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=autocomplete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/lang-cypher/autocomplete.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,20 @@ export declare const cypherTokenTypeToNode: (facet: Facet<unknown>) => {
|
|
|
25
25
|
none: NodeType;
|
|
26
26
|
separator: NodeType;
|
|
27
27
|
punctuation: NodeType;
|
|
28
|
+
consoleCommand: NodeType;
|
|
29
|
+
'class-name': NodeType;
|
|
30
|
+
identifier: NodeType;
|
|
31
|
+
string: NodeType;
|
|
32
|
+
relationship: NodeType;
|
|
33
|
+
boolean: NodeType;
|
|
34
|
+
number: NodeType;
|
|
35
|
+
setting: NodeType;
|
|
36
|
+
settingValue: NodeType;
|
|
37
|
+
interpolationDelimiter: NodeType;
|
|
28
38
|
};
|
|
39
|
+
type PrismSpecificTokenType = 'class-name' | 'identifier' | 'string' | 'relationship' | 'boolean' | 'number';
|
|
40
|
+
export type CodemirrorParseTokenType = CypherTokenType | PrismSpecificTokenType | 'topNode';
|
|
29
41
|
export type HighlightedCypherTokenTypes = Exclude<CypherTokenType, 'none'>;
|
|
30
42
|
export declare const tokenTypeToStyleTag: Record<HighlightedCypherTokenTypes, Tag>;
|
|
31
43
|
export declare const parserAdapterNodeSet: (nodes: Record<string, NodeType>) => NodeSet;
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { languageDataProp } from '@codemirror/language';
|
|
2
|
+
import { NodeSet, NodeType } from '@lezer/common';
|
|
3
|
+
import { styleTags, tags } from '@lezer/highlight';
|
|
4
|
+
export const cypherTokenTypeToNode = (facet) => ({
|
|
5
|
+
topNode: NodeType.define({
|
|
6
|
+
id: 0,
|
|
7
|
+
name: 'topNode',
|
|
8
|
+
props: [languageDataProp.add({ topNode: facet })],
|
|
9
|
+
}),
|
|
10
|
+
comment: NodeType.define({ id: 1, name: 'comment' }),
|
|
11
|
+
keyword: NodeType.define({ id: 2, name: 'keyword' }),
|
|
12
|
+
label: NodeType.define({ id: 3, name: 'label' }),
|
|
13
|
+
predicateFunction: NodeType.define({ id: 4, name: 'predicateFunction' }),
|
|
14
|
+
function: NodeType.define({ id: 5, name: 'function' }),
|
|
15
|
+
procedure: NodeType.define({ id: 6, name: 'procedure' }),
|
|
16
|
+
variable: NodeType.define({ id: 7, name: 'variable' }),
|
|
17
|
+
paramDollar: NodeType.define({ id: 8, name: 'paramDollar' }),
|
|
18
|
+
paramValue: NodeType.define({ id: 9, name: 'paramValue' }),
|
|
19
|
+
symbolicName: NodeType.define({ id: 10, name: 'symbolicName' }),
|
|
20
|
+
operator: NodeType.define({ id: 11, name: 'operator' }),
|
|
21
|
+
stringLiteral: NodeType.define({ id: 12, name: 'stringLiteral' }),
|
|
22
|
+
numberLiteral: NodeType.define({ id: 13, name: 'numberLiteral' }),
|
|
23
|
+
booleanLiteral: NodeType.define({ id: 14, name: 'booleanLiteral' }),
|
|
24
|
+
keywordLiteral: NodeType.define({ id: 15, name: 'keywordLiteral' }),
|
|
25
|
+
property: NodeType.define({ id: 16, name: 'property' }),
|
|
26
|
+
namespace: NodeType.define({ id: 17, name: 'namespace' }),
|
|
27
|
+
bracket: NodeType.define({ id: 18, name: 'bracket' }),
|
|
28
|
+
none: NodeType.define({ id: 19, name: 'none' }),
|
|
29
|
+
separator: NodeType.define({ id: 20, name: 'separator' }),
|
|
30
|
+
punctuation: NodeType.define({ id: 21, name: 'punctuation' }),
|
|
31
|
+
consoleCommand: NodeType.define({ id: 22, name: 'consoleCommand' }),
|
|
32
|
+
// also include prism token types
|
|
33
|
+
'class-name': NodeType.define({ id: 23, name: 'label' }),
|
|
34
|
+
// this is escaped variables
|
|
35
|
+
identifier: NodeType.define({ id: 24, name: 'variable' }),
|
|
36
|
+
string: NodeType.define({ id: 25, name: 'stringLiteral' }),
|
|
37
|
+
relationship: NodeType.define({ id: 26, name: 'label' }),
|
|
38
|
+
boolean: NodeType.define({ id: 27, name: 'booleanLiteral' }),
|
|
39
|
+
number: NodeType.define({ id: 28, name: 'numberLiteral' }),
|
|
40
|
+
setting: NodeType.define({ id: 29, name: 'setting' }),
|
|
41
|
+
settingValue: NodeType.define({ id: 30, name: 'settingValue' }),
|
|
42
|
+
interpolationDelimiter: NodeType.define({
|
|
43
|
+
id: 31,
|
|
44
|
+
name: 'interpolationDelimiter',
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
export const tokenTypeToStyleTag = {
|
|
48
|
+
comment: tags.comment,
|
|
49
|
+
keyword: tags.keyword,
|
|
50
|
+
label: tags.typeName,
|
|
51
|
+
predicateFunction: tags.function(tags.variableName),
|
|
52
|
+
function: tags.function(tags.variableName),
|
|
53
|
+
procedure: tags.function(tags.variableName),
|
|
54
|
+
variable: tags.variableName,
|
|
55
|
+
paramDollar: tags.atom,
|
|
56
|
+
paramValue: tags.atom,
|
|
57
|
+
interpolationDelimiter: tags.atom,
|
|
58
|
+
symbolicName: tags.variableName,
|
|
59
|
+
operator: tags.operator,
|
|
60
|
+
stringLiteral: tags.string,
|
|
61
|
+
numberLiteral: tags.number,
|
|
62
|
+
booleanLiteral: tags.bool,
|
|
63
|
+
keywordLiteral: tags.operatorKeyword,
|
|
64
|
+
property: tags.propertyName,
|
|
65
|
+
namespace: tags.namespace,
|
|
66
|
+
bracket: tags.bracket,
|
|
67
|
+
punctuation: tags.punctuation,
|
|
68
|
+
separator: tags.separator,
|
|
69
|
+
consoleCommand: tags.macroName,
|
|
70
|
+
setting: tags.attributeName,
|
|
71
|
+
settingValue: tags.attributeValue,
|
|
72
|
+
};
|
|
73
|
+
export const parserAdapterNodeSet = (nodes) => new NodeSet(Object.values(nodes)).extend(styleTags(tokenTypeToStyleTag));
|
|
74
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lang-cypher/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { tags } from '@lezer/highlight';
|
|
2
|
+
import { highlightSyntax, CypherTokenType, } from '@neo4j-cypher/language-support';
|
|
3
|
+
import { expect, test } from 'vitest';
|
|
4
|
+
import { tokenTypeToStyleTag } from './constants';
|
|
5
|
+
const cypherQueryWithAllTokenTypes = `MATCH (variable :Label)-[:REL_TYPE]->()
|
|
6
|
+
WHERE variable.property = "String"
|
|
7
|
+
OR namespaced.function() = false
|
|
8
|
+
// comment
|
|
9
|
+
OR $parameter > 2
|
|
10
|
+
RETURN variable;`;
|
|
11
|
+
test('correctly parses all cypher token types to style tags', () => {
|
|
12
|
+
const tokens = highlightSyntax(cypherQueryWithAllTokenTypes);
|
|
13
|
+
const tokenTypes = tokens.map((token) => token.tokenType);
|
|
14
|
+
expect(tokenTypes).toEqual([
|
|
15
|
+
'keyword',
|
|
16
|
+
'bracket',
|
|
17
|
+
'variable',
|
|
18
|
+
'operator',
|
|
19
|
+
'label',
|
|
20
|
+
'bracket',
|
|
21
|
+
'separator',
|
|
22
|
+
'bracket',
|
|
23
|
+
'operator',
|
|
24
|
+
'label',
|
|
25
|
+
'bracket',
|
|
26
|
+
'separator',
|
|
27
|
+
'separator',
|
|
28
|
+
'bracket',
|
|
29
|
+
'bracket',
|
|
30
|
+
'keyword',
|
|
31
|
+
'variable',
|
|
32
|
+
'operator',
|
|
33
|
+
'property',
|
|
34
|
+
'operator',
|
|
35
|
+
'stringLiteral',
|
|
36
|
+
'keyword',
|
|
37
|
+
'function',
|
|
38
|
+
'operator',
|
|
39
|
+
'function',
|
|
40
|
+
'bracket',
|
|
41
|
+
'bracket',
|
|
42
|
+
'operator',
|
|
43
|
+
'booleanLiteral',
|
|
44
|
+
'comment',
|
|
45
|
+
'keyword',
|
|
46
|
+
'paramDollar',
|
|
47
|
+
'paramValue',
|
|
48
|
+
'operator',
|
|
49
|
+
'numberLiteral',
|
|
50
|
+
'keyword',
|
|
51
|
+
'variable',
|
|
52
|
+
'punctuation',
|
|
53
|
+
]);
|
|
54
|
+
const styleTags = tokenTypes.map((tokenType) => {
|
|
55
|
+
if (tokenType === CypherTokenType.none)
|
|
56
|
+
return undefined;
|
|
57
|
+
return tokenTypeToStyleTag[tokenType];
|
|
58
|
+
});
|
|
59
|
+
const correctTags = [
|
|
60
|
+
tags.keyword,
|
|
61
|
+
tags.bracket,
|
|
62
|
+
tags.variableName,
|
|
63
|
+
tags.operator,
|
|
64
|
+
tags.typeName,
|
|
65
|
+
tags.bracket,
|
|
66
|
+
tags.separator,
|
|
67
|
+
tags.bracket,
|
|
68
|
+
tags.operator,
|
|
69
|
+
tags.typeName,
|
|
70
|
+
tags.bracket,
|
|
71
|
+
tags.separator,
|
|
72
|
+
tags.separator,
|
|
73
|
+
tags.bracket,
|
|
74
|
+
tags.bracket,
|
|
75
|
+
tags.keyword,
|
|
76
|
+
tags.variableName,
|
|
77
|
+
tags.operator,
|
|
78
|
+
tags.propertyName,
|
|
79
|
+
tags.operator,
|
|
80
|
+
tags.string,
|
|
81
|
+
tags.keyword,
|
|
82
|
+
tags.function(tags.variableName),
|
|
83
|
+
tags.operator,
|
|
84
|
+
tags.function(tags.variableName),
|
|
85
|
+
tags.bracket,
|
|
86
|
+
tags.bracket,
|
|
87
|
+
tags.operator,
|
|
88
|
+
tags.bool,
|
|
89
|
+
tags.comment,
|
|
90
|
+
tags.keyword,
|
|
91
|
+
tags.atom,
|
|
92
|
+
tags.atom,
|
|
93
|
+
tags.operator,
|
|
94
|
+
tags.number,
|
|
95
|
+
tags.keyword,
|
|
96
|
+
tags.variableName,
|
|
97
|
+
tags.punctuation,
|
|
98
|
+
];
|
|
99
|
+
styleTags.forEach((styleTag, index) => {
|
|
100
|
+
expect(styleTag).toEqual(correctTags[index]);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=contants.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contants.test.js","sourceRoot":"","sources":["../../../src/lang-cypher/contants.test.ts"],"names":[],"mappings":"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"}
|
package/dist/{types/lang-cypher/create-cypher-theme.d.ts → src/lang-cypher/createCypherTheme.d.ts}
RENAMED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { Extension } from '@codemirror/state';
|
|
2
2
|
import { HighlightedCypherTokenTypes } from './constants';
|
|
3
|
+
export interface DiffColors {
|
|
4
|
+
/** Background fill for the whole inserted/changed line. */
|
|
5
|
+
insertedLine: string;
|
|
6
|
+
/** Highlight for the exact inserted text within a changed line. */
|
|
7
|
+
insertedText: string;
|
|
8
|
+
/** Background fill for the whole deleted line widget. */
|
|
9
|
+
deletedLine: string;
|
|
10
|
+
/** Highlight for the exact deleted text within a deleted chunk. */
|
|
11
|
+
deletedText: string;
|
|
12
|
+
}
|
|
3
13
|
export interface ThemeOptions {
|
|
4
14
|
dark: boolean;
|
|
5
15
|
editorSettings: {
|
|
@@ -22,5 +32,6 @@ export interface ThemeOptions {
|
|
|
22
32
|
};
|
|
23
33
|
highlightStyles: Partial<Record<HighlightedCypherTokenTypes, string>>;
|
|
24
34
|
inheritBgColor?: boolean;
|
|
35
|
+
diffColors?: DiffColors;
|
|
25
36
|
}
|
|
26
|
-
export declare const createCypherTheme: ({ dark, editorSettings: settings, highlightStyles, inheritBgColor, }: ThemeOptions) => Extension;
|
|
37
|
+
export declare const createCypherTheme: ({ dark, editorSettings: settings, highlightStyles, inheritBgColor, diffColors, }: ThemeOptions) => Extension;
|