keli-ui 0.3.13 → 0.3.14
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/dist/{ApprovalRecord-BncClAVJ.js → ApprovalRecord-CAUi65p8.js} +2 -2
- package/dist/{ApprovalRecord-BncClAVJ.js.map → ApprovalRecord-CAUi65p8.js.map} +1 -1
- package/dist/{api-BijZYgZr.js → api-DPWBxyJL.js} +48 -48
- package/dist/{api-BijZYgZr.js.map → api-DPWBxyJL.js.map} +1 -1
- package/dist/components/FormComponent/FormCodeEditor/index.d.ts +2 -1
- package/dist/components/FormComponent/FormCodeEditor/language/index.d.ts +114 -0
- package/dist/components/FormComponent/FormCodeEditor/language/java.d.ts +1 -1
- package/dist/components/FormComponent/FormCodeEditor/language/postgresql.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/{java-XIxqoWBD.js → java-CanB8gLZ.js} +39 -33
- package/dist/java-CanB8gLZ.js.map +1 -0
- package/dist/keli-ui.js +1270 -1250
- package/dist/keli-ui.js.map +1 -1
- package/dist/keli-ui.umd.cjs +6 -6
- package/dist/keli-ui.umd.cjs.map +1 -1
- package/dist/{mysql-D_yXY3Wl.js → mysql-BfiDepTc.js} +8 -4
- package/dist/{mysql-D_yXY3Wl.js.map → mysql-BfiDepTc.js.map} +1 -1
- package/dist/{postgresql-KYgISeDf.js → postgresql-63S_TxNE.js} +29 -23
- package/dist/postgresql-63S_TxNE.js.map +1 -0
- package/package.json +1 -1
- package/dist/java-XIxqoWBD.js.map +0 -1
- package/dist/postgresql-KYgISeDf.js.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as Java from './java';
|
|
2
|
+
export declare const codeLanguages: {
|
|
3
|
+
java: {
|
|
4
|
+
conf: {
|
|
5
|
+
wordPattern: RegExp;
|
|
6
|
+
comments: {
|
|
7
|
+
lineComment: string;
|
|
8
|
+
blockComment: string[];
|
|
9
|
+
};
|
|
10
|
+
brackets: string[][];
|
|
11
|
+
autoClosingPairs: {
|
|
12
|
+
open: string;
|
|
13
|
+
close: string;
|
|
14
|
+
}[];
|
|
15
|
+
surroundingPairs: {
|
|
16
|
+
open: string;
|
|
17
|
+
close: string;
|
|
18
|
+
}[];
|
|
19
|
+
folding: {
|
|
20
|
+
markers: {
|
|
21
|
+
start: RegExp;
|
|
22
|
+
end: RegExp;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
language: {
|
|
27
|
+
defaultToken: string;
|
|
28
|
+
tokenPostfix: string;
|
|
29
|
+
keywords: string[];
|
|
30
|
+
operators: string[];
|
|
31
|
+
typeKeywords: string[];
|
|
32
|
+
symbols: RegExp;
|
|
33
|
+
escapes: RegExp;
|
|
34
|
+
digits: RegExp;
|
|
35
|
+
octaldigits: RegExp;
|
|
36
|
+
binarydigits: RegExp;
|
|
37
|
+
hexdigits: RegExp;
|
|
38
|
+
tokenizer: {
|
|
39
|
+
root: ((string | RegExp)[] | (RegExp | (string | {
|
|
40
|
+
cases: {
|
|
41
|
+
"@keywords": string;
|
|
42
|
+
"@typeKeywords": string;
|
|
43
|
+
"@default": string;
|
|
44
|
+
};
|
|
45
|
+
})[])[] | (RegExp | {
|
|
46
|
+
cases: {
|
|
47
|
+
"@keywords": string;
|
|
48
|
+
"@typeKeywords": string;
|
|
49
|
+
"@default": string;
|
|
50
|
+
};
|
|
51
|
+
})[] | (RegExp | {
|
|
52
|
+
cases: {
|
|
53
|
+
"@keywords": {
|
|
54
|
+
token: string;
|
|
55
|
+
};
|
|
56
|
+
"@default": string;
|
|
57
|
+
};
|
|
58
|
+
})[] | {
|
|
59
|
+
include: string;
|
|
60
|
+
} | (RegExp | {
|
|
61
|
+
cases: {
|
|
62
|
+
"@operators": string;
|
|
63
|
+
"@default": string;
|
|
64
|
+
};
|
|
65
|
+
})[])[];
|
|
66
|
+
whitespace: (string | RegExp)[][];
|
|
67
|
+
comment: (string | RegExp)[][];
|
|
68
|
+
javadoc: (string | RegExp)[][];
|
|
69
|
+
string: (string | RegExp)[][];
|
|
70
|
+
multistring: (string | RegExp)[][];
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
registerCompletion: typeof Java.registerJavaCompletion;
|
|
74
|
+
defineThemes: typeof Java.defineJavaThemes;
|
|
75
|
+
};
|
|
76
|
+
mysql: {
|
|
77
|
+
conf: {
|
|
78
|
+
comments: {
|
|
79
|
+
lineComment: string;
|
|
80
|
+
blockComment: string[];
|
|
81
|
+
};
|
|
82
|
+
brackets: string[][];
|
|
83
|
+
autoClosingPairs: {
|
|
84
|
+
open: string;
|
|
85
|
+
close: string;
|
|
86
|
+
}[];
|
|
87
|
+
surroundingPairs: {
|
|
88
|
+
open: string;
|
|
89
|
+
close: string;
|
|
90
|
+
}[];
|
|
91
|
+
};
|
|
92
|
+
language: {
|
|
93
|
+
comments: {
|
|
94
|
+
lineComment: string;
|
|
95
|
+
blockComment: string[];
|
|
96
|
+
};
|
|
97
|
+
brackets: string[][];
|
|
98
|
+
autoClosingPairs: {
|
|
99
|
+
open: string;
|
|
100
|
+
close: string;
|
|
101
|
+
}[];
|
|
102
|
+
surroundingPairs: {
|
|
103
|
+
open: string;
|
|
104
|
+
close: string;
|
|
105
|
+
}[];
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
postgresql: {
|
|
109
|
+
conf: import("monaco-editor").languages.LanguageConfiguration;
|
|
110
|
+
language: import("monaco-editor").languages.LanguageConfiguration;
|
|
111
|
+
registerCompletion: void;
|
|
112
|
+
defineThemes: void;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
@@ -67,6 +67,6 @@ declare const language: {
|
|
|
67
67
|
multistring: (string | RegExp)[][];
|
|
68
68
|
};
|
|
69
69
|
};
|
|
70
|
-
export { conf, language, registerJavaCompletion, defineJavaThemes };
|
|
71
70
|
declare function defineJavaThemes(): void;
|
|
72
71
|
declare function registerJavaCompletion(): void;
|
|
72
|
+
export { conf, language, registerJavaCompletion, defineJavaThemes };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as monaco from 'monaco-editor';
|
|
2
2
|
declare const conf: monaco.languages.LanguageConfiguration;
|
|
3
3
|
declare const language: monaco.languages.IMonarchLanguage;
|
|
4
|
-
export { conf, language, registerPgsqlCompletion, definePgsqlThemes };
|
|
5
4
|
declare function definePgsqlThemes(): void;
|
|
6
5
|
declare function registerPgsqlCompletion(): void;
|
|
6
|
+
export { conf, language, registerPgsqlCompletion, definePgsqlThemes };
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export * from './types';
|
|
|
11
11
|
export * from './config';
|
|
12
12
|
export * from './utils';
|
|
13
13
|
export { convertAreaToFieldset } from './components/FormComponent/FormRender/hooks/formRender.hook';
|
|
14
|
+
export { codeLanguages } from './components/FormComponent/FormCodeEditor';
|
|
14
15
|
/**
|
|
15
16
|
* 控制深浅色模式
|
|
16
17
|
*/
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { at as e } from "./api-DPWBxyJL.js";
|
|
2
|
+
import * as t from "monaco-editor";
|
|
2
3
|
//#region src/components/FormComponent/FormCodeEditor/language/java.ts
|
|
3
|
-
var
|
|
4
|
+
var n = /* @__PURE__ */ e({
|
|
5
|
+
conf: () => r,
|
|
6
|
+
defineJavaThemes: () => a,
|
|
7
|
+
language: () => i,
|
|
8
|
+
registerJavaCompletion: () => s
|
|
9
|
+
}), r = {
|
|
4
10
|
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
|
|
5
11
|
comments: {
|
|
6
12
|
lineComment: "//",
|
|
@@ -63,7 +69,7 @@ var t = {
|
|
|
63
69
|
start: /* @__PURE__ */ RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))"),
|
|
64
70
|
end: /* @__PURE__ */ RegExp("^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))")
|
|
65
71
|
} }
|
|
66
|
-
},
|
|
72
|
+
}, i = {
|
|
67
73
|
defaultToken: "",
|
|
68
74
|
tokenPostfix: ".java",
|
|
69
75
|
keywords: /* @__PURE__ */ "abstract.continue.for.new.switch.assert.default.goto.package.synchronized.boolean.do.if.private.this.break.double.implements.protected.throw.byte.else.import.public.throws.case.enum.instanceof.return.transient.catch.extends.int.short.try.char.final.interface.static.void.class.finally.long.strictfp.volatile.const.float.native.super.while.true.false.yield.record.sealed.non-sealed.permits".split("."),
|
|
@@ -187,8 +193,8 @@ var t = {
|
|
|
187
193
|
]
|
|
188
194
|
}
|
|
189
195
|
};
|
|
190
|
-
function
|
|
191
|
-
|
|
196
|
+
function a() {
|
|
197
|
+
t.editor.defineTheme("java-dark", {
|
|
192
198
|
base: "vs-dark",
|
|
193
199
|
inherit: !0,
|
|
194
200
|
rules: [
|
|
@@ -314,7 +320,7 @@ function r() {
|
|
|
314
320
|
}
|
|
315
321
|
],
|
|
316
322
|
colors: {}
|
|
317
|
-
}),
|
|
323
|
+
}), t.editor.defineTheme("java-light", {
|
|
318
324
|
base: "vs",
|
|
319
325
|
inherit: !0,
|
|
320
326
|
rules: [
|
|
@@ -394,21 +400,21 @@ function r() {
|
|
|
394
400
|
colors: {}
|
|
395
401
|
});
|
|
396
402
|
}
|
|
397
|
-
var
|
|
398
|
-
function
|
|
399
|
-
|
|
403
|
+
var o = !1;
|
|
404
|
+
function s() {
|
|
405
|
+
o || (o = !0, t.languages.registerCompletionItemProvider("java", {
|
|
400
406
|
triggerCharacters: [
|
|
401
407
|
".",
|
|
402
408
|
"@",
|
|
403
409
|
" "
|
|
404
410
|
],
|
|
405
|
-
provideCompletionItems: (
|
|
406
|
-
let r =
|
|
411
|
+
provideCompletionItems: (e, n) => {
|
|
412
|
+
let r = e.getWordUntilPosition(n), i = {
|
|
407
413
|
startLineNumber: n.lineNumber,
|
|
408
414
|
endLineNumber: n.lineNumber,
|
|
409
415
|
startColumn: r.startColumn,
|
|
410
416
|
endColumn: r.endColumn
|
|
411
|
-
}, a =
|
|
417
|
+
}, a = e.getLineContent(n.lineNumber).substring(0, n.column - 1), o = r.word.toLowerCase(), s = [];
|
|
412
418
|
if (o.length >= 1 && [
|
|
413
419
|
[
|
|
414
420
|
"public",
|
|
@@ -1315,18 +1321,18 @@ function a() {
|
|
|
1315
1321
|
"抑制警告",
|
|
1316
1322
|
"@SuppressWarnings(\"$1\")"
|
|
1317
1323
|
]
|
|
1318
|
-
].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([
|
|
1324
|
+
].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([e, n, r]) => {
|
|
1319
1325
|
s.push({
|
|
1320
|
-
label:
|
|
1326
|
+
label: e,
|
|
1321
1327
|
detail: n,
|
|
1322
1328
|
insertText: r,
|
|
1323
1329
|
range: i,
|
|
1324
|
-
kind:
|
|
1325
|
-
insertTextRules:
|
|
1326
|
-
sortText: "0" +
|
|
1330
|
+
kind: t.languages.CompletionItemKind.Keyword,
|
|
1331
|
+
insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet,
|
|
1332
|
+
sortText: "0" + e
|
|
1327
1333
|
});
|
|
1328
1334
|
}), a.endsWith("@") || /@\w*$/.test(a)) {
|
|
1329
|
-
let
|
|
1335
|
+
let e = [
|
|
1330
1336
|
[
|
|
1331
1337
|
"@Override",
|
|
1332
1338
|
"重写方法",
|
|
@@ -1528,14 +1534,14 @@ function a() {
|
|
|
1528
1534
|
startColumn: r + 1,
|
|
1529
1535
|
endColumn: n.column
|
|
1530
1536
|
};
|
|
1531
|
-
|
|
1537
|
+
e.filter(([e]) => i.length === 0 || e.toLowerCase().includes(i)).forEach(([e, n, r]) => {
|
|
1532
1538
|
s.push({
|
|
1533
|
-
label:
|
|
1539
|
+
label: e,
|
|
1534
1540
|
detail: n,
|
|
1535
1541
|
insertText: r,
|
|
1536
1542
|
range: o,
|
|
1537
|
-
kind:
|
|
1538
|
-
insertTextRules:
|
|
1543
|
+
kind: t.languages.CompletionItemKind.Interface,
|
|
1544
|
+
insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet
|
|
1539
1545
|
});
|
|
1540
1546
|
});
|
|
1541
1547
|
}
|
|
@@ -1920,14 +1926,14 @@ function a() {
|
|
|
1920
1926
|
"格式化打印",
|
|
1921
1927
|
"printf($1)"
|
|
1922
1928
|
]
|
|
1923
|
-
].forEach(([
|
|
1929
|
+
].forEach(([e, n, r]) => {
|
|
1924
1930
|
s.push({
|
|
1925
|
-
label:
|
|
1931
|
+
label: e,
|
|
1926
1932
|
detail: n,
|
|
1927
1933
|
insertText: r,
|
|
1928
1934
|
range: i,
|
|
1929
|
-
kind:
|
|
1930
|
-
insertTextRules:
|
|
1935
|
+
kind: t.languages.CompletionItemKind.Method,
|
|
1936
|
+
insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet
|
|
1931
1937
|
});
|
|
1932
1938
|
}), o.length >= 1 && [
|
|
1933
1939
|
[
|
|
@@ -2275,21 +2281,21 @@ function a() {
|
|
|
2275
2281
|
"DateTimeFormatter",
|
|
2276
2282
|
"DateTimeFormatter.ofPattern(\"$1\")"
|
|
2277
2283
|
]
|
|
2278
|
-
].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([
|
|
2284
|
+
].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([e, n, r]) => {
|
|
2279
2285
|
s.push({
|
|
2280
|
-
label:
|
|
2286
|
+
label: e,
|
|
2281
2287
|
detail: n,
|
|
2282
2288
|
insertText: r,
|
|
2283
2289
|
range: i,
|
|
2284
|
-
kind:
|
|
2285
|
-
insertTextRules:
|
|
2286
|
-
sortText: "1" +
|
|
2290
|
+
kind: t.languages.CompletionItemKind.Snippet,
|
|
2291
|
+
insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet,
|
|
2292
|
+
sortText: "1" + e
|
|
2287
2293
|
});
|
|
2288
2294
|
}), { suggestions: s };
|
|
2289
2295
|
}
|
|
2290
2296
|
}));
|
|
2291
2297
|
}
|
|
2292
2298
|
//#endregion
|
|
2293
|
-
export {
|
|
2299
|
+
export { s as a, i, a as n, n as r, r as t };
|
|
2294
2300
|
|
|
2295
|
-
//# sourceMappingURL=java-
|
|
2301
|
+
//# sourceMappingURL=java-CanB8gLZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-CanB8gLZ.js","names":[],"sources":["../src/components/FormComponent/FormCodeEditor/language/java.ts"],"sourcesContent":["import * as monaco from 'monaco-editor';\r\n\r\nconst conf = {\r\n // the default separators except `@$`\r\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\r\n comments: {\r\n lineComment: \"//\",\r\n blockComment: [\"/*\", \"*/\"]\r\n },\r\n brackets: [\r\n [\"{\", \"}\"],\r\n [\"[\", \"]\"],\r\n [\"(\", \")\"]\r\n ],\r\n autoClosingPairs: [\r\n { open: \"{\", close: \"}\" },\r\n { open: \"[\", close: \"]\" },\r\n { open: \"(\", close: \")\" },\r\n { open: '\"', close: '\"' },\r\n { open: \"'\", close: \"'\" }\r\n ],\r\n surroundingPairs: [\r\n { open: \"{\", close: \"}\" },\r\n { open: \"[\", close: \"]\" },\r\n { open: \"(\", close: \")\" },\r\n { open: '\"', close: '\"' },\r\n { open: \"'\", close: \"'\" },\r\n { open: \"<\", close: \">\" }\r\n ],\r\n folding: {\r\n markers: {\r\n start: new RegExp(\"^\\\\s*//\\\\s*(?:(?:#?region\\\\b)|(?:<editor-fold\\\\b))\"),\r\n end: new RegExp(\"^\\\\s*//\\\\s*(?:(?:#?endregion\\\\b)|(?:</editor-fold>))\")\r\n }\r\n }\r\n};\r\nconst language = {\r\n defaultToken: \"\",\r\n tokenPostfix: \".java\",\r\n keywords: [\r\n \"abstract\",\r\n \"continue\",\r\n \"for\",\r\n \"new\",\r\n \"switch\",\r\n \"assert\",\r\n \"default\",\r\n \"goto\",\r\n \"package\",\r\n \"synchronized\",\r\n \"boolean\",\r\n \"do\",\r\n \"if\",\r\n \"private\",\r\n \"this\",\r\n \"break\",\r\n \"double\",\r\n \"implements\",\r\n \"protected\",\r\n \"throw\",\r\n \"byte\",\r\n \"else\",\r\n \"import\",\r\n \"public\",\r\n \"throws\",\r\n \"case\",\r\n \"enum\",\r\n \"instanceof\",\r\n \"return\",\r\n \"transient\",\r\n \"catch\",\r\n \"extends\",\r\n \"int\",\r\n \"short\",\r\n \"try\",\r\n \"char\",\r\n \"final\",\r\n \"interface\",\r\n \"static\",\r\n \"void\",\r\n \"class\",\r\n \"finally\",\r\n \"long\",\r\n \"strictfp\",\r\n \"volatile\",\r\n \"const\",\r\n \"float\",\r\n \"native\",\r\n \"super\",\r\n \"while\",\r\n \"true\",\r\n \"false\",\r\n \"yield\",\r\n \"record\",\r\n \"sealed\",\r\n \"non-sealed\",\r\n \"permits\"\r\n ],\r\n operators: [\r\n \"=\",\r\n \">\",\r\n \"<\",\r\n \"!\",\r\n \"~\",\r\n \"?\",\r\n \":\",\r\n \"==\",\r\n \"<=\",\r\n \">=\",\r\n \"!=\",\r\n \"&&\",\r\n \"||\",\r\n \"++\",\r\n \"--\",\r\n \"+\",\r\n \"-\",\r\n \"*\",\r\n \"/\",\r\n \"&\",\r\n \"|\",\r\n \"^\",\r\n \"%\",\r\n \"<<\",\r\n \">>\",\r\n \">>>\",\r\n \"+=\",\r\n \"-=\",\r\n \"*=\",\r\n \"/=\",\r\n \"&=\",\r\n \"|=\",\r\n \"^=\",\r\n \"%=\",\r\n \"<<=\",\r\n \">>=\",\r\n \">>>=\"\r\n ],\r\n // 常用类型\r\n typeKeywords: [\r\n 'String', 'Integer', 'Long', 'Double', 'Float', 'Boolean', 'Character', 'Byte', 'Short',\r\n 'Object', 'Class', 'System', 'Math', 'StringBuilder', 'StringBuffer',\r\n 'List', 'ArrayList', 'LinkedList', 'Map', 'HashMap', 'TreeMap', 'LinkedHashMap',\r\n 'Set', 'HashSet', 'TreeSet', 'LinkedHashSet', 'Queue', 'Deque', 'Stack',\r\n 'Collection', 'Collections', 'Arrays', 'Optional', 'Stream', 'Collectors',\r\n 'Exception', 'RuntimeException', 'Error', 'Throwable',\r\n 'Thread', 'Runnable', 'Callable', 'Future', 'CompletableFuture',\r\n 'Date', 'LocalDate', 'LocalTime', 'LocalDateTime', 'Instant', 'Duration',\r\n 'File', 'Path', 'Files', 'InputStream', 'OutputStream', 'Reader', 'Writer',\r\n 'Pattern', 'Matcher', 'Scanner', 'Random', 'UUID',\r\n 'BigDecimal', 'BigInteger', 'AtomicInteger', 'AtomicLong',\r\n 'Comparator', 'Comparable', 'Iterator', 'Iterable',\r\n 'Function', 'Consumer', 'Supplier', 'Predicate', 'BiFunction',\r\n ],\r\n // we include these common regular expressions\r\n symbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\r\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\r\n digits: /\\d+(_+\\d+)*/,\r\n octaldigits: /[0-7]+(_+[0-7]+)*/,\r\n binarydigits: /[0-1]+(_+[0-1]+)*/,\r\n hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\r\n // The main tokenizer for our languages\r\n tokenizer: {\r\n root: [\r\n // Special keyword with a dash\r\n [\"non-sealed\", \"keyword.non-sealed\"],\r\n // 方法调用 - xxx.method() 中的 method 显示为函数色\r\n [/([a-zA-Z_$][\\w$]*)(\\s*)(\\()/, [\r\n {\r\n cases: {\r\n \"@keywords\": \"keyword.$0\",\r\n \"@typeKeywords\": \"type\",\r\n \"@default\": \"function\"\r\n }\r\n },\r\n \"\",\r\n \"@brackets\"\r\n ]],\r\n // 类名 - 大写开头的标识符\r\n [/[A-Z][\\w$]*/, {\r\n cases: {\r\n \"@keywords\": \"keyword.$0\",\r\n \"@typeKeywords\": \"type\",\r\n \"@default\": \"type\"\r\n }\r\n }],\r\n // identifiers and keywords\r\n [\r\n /[a-z_$][\\w$]*/,\r\n {\r\n cases: {\r\n \"@keywords\": { token: \"keyword.$0\" },\r\n \"@default\": \"identifier\"\r\n }\r\n }\r\n ],\r\n // whitespace\r\n { include: \"@whitespace\" },\r\n // delimiters and operators\r\n [/[{}()\\[\\]]/, \"@brackets\"],\r\n [/[<>](?!@symbols)/, \"@brackets\"],\r\n [\r\n /@symbols/,\r\n {\r\n cases: {\r\n \"@operators\": \"delimiter\",\r\n \"@default\": \"\"\r\n }\r\n }\r\n ],\r\n // @ annotations.\r\n [/@\\s*[a-zA-Z_\\$][\\w\\$]*/, \"annotation\"],\r\n // numbers\r\n [/(@digits)[eE]([\\-+]?(@digits))?[fFdD]?/, \"number.float\"],\r\n [/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?[fFdD]?/, \"number.float\"],\r\n [/0[xX](@hexdigits)[Ll]?/, \"number.hex\"],\r\n [/0(@octaldigits)[Ll]?/, \"number.octal\"],\r\n [/0[bB](@binarydigits)[Ll]?/, \"number.binary\"],\r\n [/(@digits)[fFdD]/, \"number.float\"],\r\n [/(@digits)[lL]?/, \"number\"],\r\n // delimiter: after number because of .\\d floats\r\n [/[;,.]/, \"delimiter\"],\r\n // strings\r\n [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\r\n // non-teminated string\r\n [/\"\"\"/, \"string\", \"@multistring\"],\r\n [/\"/, \"string\", \"@string\"],\r\n // characters\r\n [/'[^\\\\']'/, \"string\"],\r\n [/(')(@escapes)(')/, [\"string\", \"string.escape\", \"string\"]],\r\n [/'/, \"string.invalid\"]\r\n ],\r\n whitespace: [\r\n [/[ \\t\\r\\n]+/, \"\"],\r\n [/\\/\\*\\*(?!\\/)/, \"comment.doc\", \"@javadoc\"],\r\n [/\\/\\*/, \"comment\", \"@comment\"],\r\n [/\\/\\/.*$/, \"comment\"]\r\n ],\r\n comment: [\r\n [/[^\\/*]+/, \"comment\"],\r\n // [/\\/\\*/, 'comment', '@push' ], // nested comment not allowed :-(\r\n // [/\\/\\*/, 'comment.invalid' ], // this breaks block comments in the shape of /* //*/\r\n [/\\*\\//, \"comment\", \"@pop\"],\r\n [/[\\/*]/, \"comment\"]\r\n ],\r\n //Identical copy of comment above, except for the addition of .doc\r\n javadoc: [\r\n [/[^\\/*]+/, \"comment.doc\"],\r\n // [/\\/\\*/, 'comment.doc', '@push' ], // nested comment not allowed :-(\r\n [/\\/\\*/, \"comment.doc.invalid\"],\r\n [/\\*\\//, \"comment.doc\", \"@pop\"],\r\n [/[\\/*]/, \"comment.doc\"]\r\n ],\r\n string: [\r\n [/[^\\\\\"]+/, \"string\"],\r\n [/@escapes/, \"string.escape\"],\r\n [/\\\\./, \"string.escape.invalid\"],\r\n [/\"/, \"string\", \"@pop\"]\r\n ],\r\n multistring: [\r\n [/[^\\\\\"]+/, \"string\"],\r\n [/@escapes/, \"string.escape\"],\r\n [/\\\\./, \"string.escape.invalid\"],\r\n [/\"\"\"/, \"string\", \"@pop\"],\r\n [/./, \"string\"]\r\n ]\r\n }\r\n};\r\n\r\nfunction defineJavaThemes() {\r\n // Java 暗色主题\r\n monaco.editor.defineTheme('java-dark', {\r\n base: 'vs-dark',\r\n inherit: true,\r\n rules: [\r\n { token: 'keyword', foreground: '569CD6' },\r\n { token: 'keyword.package', foreground: 'C586C0' },\r\n { token: 'keyword.import', foreground: 'C586C0' },\r\n { token: 'keyword.class', foreground: '569CD6' },\r\n { token: 'keyword.interface', foreground: '569CD6' },\r\n { token: 'keyword.public', foreground: '569CD6' },\r\n { token: 'keyword.private', foreground: '569CD6' },\r\n { token: 'keyword.protected', foreground: '569CD6' },\r\n { token: 'keyword.static', foreground: '569CD6' },\r\n { token: 'keyword.final', foreground: '569CD6' },\r\n { token: 'keyword.void', foreground: '569CD6' },\r\n { token: 'keyword.return', foreground: 'C586C0' },\r\n { token: 'keyword.new', foreground: '569CD6' },\r\n { token: 'keyword.if', foreground: 'C586C0' },\r\n { token: 'keyword.else', foreground: 'C586C0' },\r\n { token: 'keyword.for', foreground: 'C586C0' },\r\n { token: 'keyword.while', foreground: 'C586C0' },\r\n { token: 'keyword.try', foreground: 'C586C0' },\r\n { token: 'keyword.catch', foreground: 'C586C0' },\r\n { token: 'keyword.throw', foreground: 'C586C0' },\r\n { token: 'keyword.throws', foreground: 'C586C0' },\r\n { token: 'type', foreground: '4EC9B0' }, // 青色 - 类型/类名\r\n { token: 'function', foreground: 'DCDCAA' }, // 黄色 - 方法名\r\n { token: 'annotation', foreground: 'D7BA7D' }, // 金色 - 注解\r\n { token: 'string', foreground: 'CE9178' }, // 橙色 - 字符串\r\n { token: 'number', foreground: 'B5CEA8' }, // 浅绿 - 数字\r\n { token: 'comment', foreground: '6A9955' }, // 绿色 - 注释\r\n { token: 'comment.doc', foreground: '6A9955' },\r\n { token: 'identifier', foreground: '9CDCFE' }, // 浅蓝 - 变量\r\n { token: 'delimiter', foreground: 'D4D4D4' },\r\n ],\r\n colors: {},\r\n });\r\n\r\n // Java 亮色主题\r\n monaco.editor.defineTheme('java-light', {\r\n base: 'vs',\r\n inherit: true,\r\n rules: [\r\n { token: 'keyword', foreground: '0000FF' },\r\n { token: 'keyword.package', foreground: 'AF00DB' },\r\n { token: 'keyword.import', foreground: 'AF00DB' },\r\n { token: 'keyword.return', foreground: 'AF00DB' },\r\n { token: 'keyword.if', foreground: 'AF00DB' },\r\n { token: 'keyword.else', foreground: 'AF00DB' },\r\n { token: 'keyword.for', foreground: 'AF00DB' },\r\n { token: 'keyword.while', foreground: 'AF00DB' },\r\n { token: 'keyword.try', foreground: 'AF00DB' },\r\n { token: 'keyword.catch', foreground: 'AF00DB' },\r\n { token: 'keyword.throw', foreground: 'AF00DB' },\r\n { token: 'type', foreground: '267F99' }, // 青色 - 类型/类名\r\n { token: 'function', foreground: '795E26' }, // 棕黄 - 方法名\r\n { token: 'annotation', foreground: '808000' }, // 橄榄 - 注解\r\n { token: 'string', foreground: 'A31515' }, // 红色 - 字符串\r\n { token: 'number', foreground: '098658' }, // 绿色 - 数字\r\n { token: 'comment', foreground: '008000' }, // 绿色 - 注释\r\n { token: 'identifier', foreground: '001080' }, // 深蓝 - 变量\r\n ],\r\n colors: {},\r\n });\r\n}\r\n\r\nlet javaCompletionRegistered = false;\r\n\r\nfunction registerJavaCompletion() {\r\n if (javaCompletionRegistered) return;\r\n javaCompletionRegistered = true;\r\n\r\n monaco.languages.registerCompletionItemProvider('java', {\r\n triggerCharacters: ['.', '@', ' '],\r\n provideCompletionItems: (model, position) => {\r\n const word = model.getWordUntilPosition(position);\r\n const range = {\r\n startLineNumber: position.lineNumber,\r\n endLineNumber: position.lineNumber,\r\n startColumn: word.startColumn,\r\n endColumn: word.endColumn,\r\n };\r\n const line = model.getLineContent(position.lineNumber);\r\n const before = line.substring(0, position.column - 1);\r\n const currentWord = word.word.toLowerCase();\r\n const suggestions: monaco.languages.CompletionItem[] = [];\r\n\r\n // Java 关键字和类型 - 只要有输入就提示\r\n if (currentWord.length >= 1) {\r\n const keywords: [string, string, string][] = [\r\n // 访问修饰符\r\n ['public', '公共访问', 'public '],\r\n ['private', '私有访问', 'private '],\r\n ['protected', '受保护访问', 'protected '],\r\n // 修饰符\r\n ['static', '静态', 'static '],\r\n ['final', '最终', 'final '],\r\n ['abstract', '抽象', 'abstract '],\r\n ['native', '本地方法', 'native '],\r\n ['strictfp', '严格浮点', 'strictfp '],\r\n ['synchronized', '同步', 'synchronized '],\r\n ['volatile', '易变', 'volatile '],\r\n ['transient', '瞬态', 'transient '],\r\n // 类型声明\r\n ['class', '类', 'class $1 {\\n $2\\n}'],\r\n ['interface', '接口', 'interface $1 {\\n $2\\n}'],\r\n ['enum', '枚举', 'enum $1 {\\n $2\\n}'],\r\n ['record', '记录类', 'record $1($2) {}'],\r\n ['@interface', '注解定义', '@interface $1 {\\n $2\\n}'],\r\n // 继承实现\r\n ['extends', '继承', 'extends '],\r\n ['implements', '实现', 'implements '],\r\n ['permits', '允许', 'permits '],\r\n ['sealed', '密封类', 'sealed '],\r\n ['non-sealed', '非密封', 'non-sealed '],\r\n // 包和导入\r\n ['package', '包声明', 'package $1;'],\r\n ['import', '导入', 'import $1;'],\r\n ['import static', '静态导入', 'import static $1;'],\r\n // 控制流\r\n ['if', '条件判断', 'if ($1) {\\n $2\\n}'],\r\n ['else', '否则', 'else {\\n $1\\n}'],\r\n ['else if', '否则如果', 'else if ($1) {\\n $2\\n}'],\r\n ['switch', 'switch语句', 'switch ($1) {\\n case $2 -> $3;\\n default -> $4;\\n}'],\r\n ['case', 'case分支', 'case $1 -> $2;'],\r\n ['default', '默认', 'default -> $1;'],\r\n ['for', 'for循环', 'for (int i = 0; i < $1; i++) {\\n $2\\n}'],\r\n ['while', 'while循环', 'while ($1) {\\n $2\\n}'],\r\n ['do', 'do-while', 'do {\\n $1\\n} while ($2);'],\r\n ['break', '跳出循环', 'break;'],\r\n ['continue', '继续循环', 'continue;'],\r\n ['return', '返回', 'return $1;'],\r\n ['yield', 'yield返回', 'yield $1;'],\r\n // 异常处理\r\n ['try', 'try块', 'try {\\n $1\\n} catch (Exception e) {\\n $2\\n}'],\r\n ['catch', 'catch块', 'catch ($1 e) {\\n $2\\n}'],\r\n ['finally', 'finally块', 'finally {\\n $1\\n}'],\r\n ['throw', '抛出异常', 'throw new $1(\"$2\");'],\r\n ['throws', '声明异常', 'throws $1'],\r\n // 对象操作\r\n ['new', '创建对象', 'new $1($2)'],\r\n ['this', '当前对象', 'this'],\r\n ['super', '父类引用', 'super'],\r\n ['instanceof', '类型检查', 'instanceof $1'],\r\n ['var', '类型推断', 'var $1 = $2;'],\r\n // 断言\r\n ['assert', '断言', 'assert $1 : \"$2\";'],\r\n // 常量\r\n ['null', '空值', 'null'],\r\n ['true', '真', 'true'],\r\n ['false', '假', 'false'],\r\n \r\n // 基本类型\r\n ['void', '无返回值', 'void'],\r\n ['boolean', '布尔型', 'boolean'],\r\n ['byte', '字节型', 'byte'],\r\n ['short', '短整型', 'short'],\r\n ['int', '整型', 'int'],\r\n ['long', '长整型', 'long'],\r\n ['float', '单精度浮点', 'float'],\r\n ['double', '双精度浮点', 'double'],\r\n ['char', '字符型', 'char'],\r\n \r\n // 包装类\r\n ['Boolean', '布尔包装类', 'Boolean'],\r\n ['Byte', '字节包装类', 'Byte'],\r\n ['Short', '短整型包装类', 'Short'],\r\n ['Integer', '整型包装类', 'Integer'],\r\n ['Long', '长整型包装类', 'Long'],\r\n ['Float', '单精度包装类', 'Float'],\r\n ['Double', '双精度包装类', 'Double'],\r\n ['Character', '字符包装类', 'Character'],\r\n ['Number', '数字基类', 'Number'],\r\n \r\n // 常用类\r\n ['String', '字符串', 'String'],\r\n ['StringBuilder', '字符串构建器', 'StringBuilder'],\r\n ['StringBuffer', '线程安全字符串', 'StringBuffer'],\r\n ['Object', '对象基类', 'Object'],\r\n ['Class', '类对象', 'Class<$1>'],\r\n ['System', '系统类', 'System'],\r\n ['Math', '数学类', 'Math'],\r\n ['Arrays', '数组工具', 'Arrays'],\r\n ['Objects', '对象工具', 'Objects'],\r\n ['Collections', '集合工具', 'Collections'],\r\n \r\n // 集合类\r\n ['List', '列表接口', 'List<$1>'],\r\n ['ArrayList', '数组列表', 'new ArrayList<$1>()'],\r\n ['LinkedList', '链表', 'new LinkedList<$1>()'],\r\n ['Set', '集合接口', 'Set<$1>'],\r\n ['HashSet', '哈希集合', 'new HashSet<$1>()'],\r\n ['TreeSet', '树集合', 'new TreeSet<$1>()'],\r\n ['LinkedHashSet', '有序哈希集合', 'new LinkedHashSet<$1>()'],\r\n ['Map', '映射接口', 'Map<$1, $2>'],\r\n ['HashMap', '哈希映射', 'new HashMap<$1, $2>()'],\r\n ['TreeMap', '树映射', 'new TreeMap<$1, $2>()'],\r\n ['LinkedHashMap', '有序哈希映射', 'new LinkedHashMap<$1, $2>()'],\r\n ['ConcurrentHashMap', '并发哈希映射', 'new ConcurrentHashMap<$1, $2>()'],\r\n ['Queue', '队列接口', 'Queue<$1>'],\r\n ['Deque', '双端队列', 'Deque<$1>'],\r\n ['Stack', '栈', 'new Stack<$1>()'],\r\n ['Vector', '向量', 'new Vector<$1>()'],\r\n ['Collection', '集合接口', 'Collection<$1>'],\r\n ['Iterable', '可迭代接口', 'Iterable<$1>'],\r\n ['Iterator', '迭代器', 'Iterator<$1>'],\r\n \r\n // Optional\r\n ['Optional', 'Optional容器', 'Optional<$1>'],\r\n ['OptionalInt', 'int的Optional', 'OptionalInt'],\r\n ['OptionalLong', 'long的Optional', 'OptionalLong'],\r\n ['OptionalDouble', 'double的Optional', 'OptionalDouble'],\r\n \r\n // Stream\r\n ['Stream', '流', 'Stream<$1>'],\r\n ['IntStream', 'int流', 'IntStream'],\r\n ['LongStream', 'long流', 'LongStream'],\r\n ['DoubleStream', 'double流', 'DoubleStream'],\r\n ['Collectors', '收集器', 'Collectors'],\r\n \r\n // 函数式接口\r\n ['Function', '函数接口', 'Function<$1, $2>'],\r\n ['BiFunction', '双参数函数', 'BiFunction<$1, $2, $3>'],\r\n ['Consumer', '消费者接口', 'Consumer<$1>'],\r\n ['BiConsumer', '双参数消费者', 'BiConsumer<$1, $2>'],\r\n ['Supplier', '供应者接口', 'Supplier<$1>'],\r\n ['Predicate', '断言接口', 'Predicate<$1>'],\r\n ['BiPredicate', '双参数断言', 'BiPredicate<$1, $2>'],\r\n ['UnaryOperator', '一元操作符', 'UnaryOperator<$1>'],\r\n ['BinaryOperator', '二元操作符', 'BinaryOperator<$1>'],\r\n ['Comparator', '比较器', 'Comparator<$1>'],\r\n ['Comparable', '可比较接口', 'Comparable<$1>'],\r\n ['Runnable', '可运行接口', 'Runnable'],\r\n ['Callable', '可调用接口', 'Callable<$1>'],\r\n \r\n // 异常类\r\n ['Exception', '异常', 'Exception'],\r\n ['RuntimeException', '运行时异常', 'RuntimeException'],\r\n ['NullPointerException', '空指针异常', 'NullPointerException'],\r\n ['IllegalArgumentException', '非法参数异常', 'IllegalArgumentException'],\r\n ['IllegalStateException', '非法状态异常', 'IllegalStateException'],\r\n ['IndexOutOfBoundsException', '索引越界异常', 'IndexOutOfBoundsException'],\r\n ['IOException', 'IO异常', 'IOException'],\r\n ['FileNotFoundException', '文件未找到异常', 'FileNotFoundException'],\r\n ['SQLException', 'SQL异常', 'SQLException'],\r\n ['ClassNotFoundException', '类未找到异常', 'ClassNotFoundException'],\r\n ['NoSuchMethodException', '方法未找到异常', 'NoSuchMethodException'],\r\n ['Error', '错误', 'Error'],\r\n ['Throwable', '可抛出', 'Throwable'],\r\n \r\n // 并发类\r\n ['Thread', '线程', 'Thread'],\r\n ['Future', 'Future接口', 'Future<$1>'],\r\n ['CompletableFuture', '可完成Future', 'CompletableFuture<$1>'],\r\n ['ExecutorService', '执行器服务', 'ExecutorService'],\r\n ['Executors', '执行器工厂', 'Executors'],\r\n ['ThreadPoolExecutor', '线程池执行器', 'ThreadPoolExecutor'],\r\n ['CountDownLatch', '倒计时门闩', 'CountDownLatch'],\r\n ['CyclicBarrier', '循环屏障', 'CyclicBarrier'],\r\n ['Semaphore', '信号量', 'Semaphore'],\r\n ['ReentrantLock', '可重入锁', 'ReentrantLock'],\r\n ['AtomicInteger', '原子整数', 'AtomicInteger'],\r\n ['AtomicLong', '原子长整数', 'AtomicLong'],\r\n ['AtomicBoolean', '原子布尔', 'AtomicBoolean'],\r\n ['AtomicReference', '原子引用', 'AtomicReference<$1>'],\r\n \r\n // 日期时间\r\n ['Date', '日期(旧)', 'Date'],\r\n ['Calendar', '日历(旧)', 'Calendar'],\r\n ['LocalDate', '本地日期', 'LocalDate'],\r\n ['LocalTime', '本地时间', 'LocalTime'],\r\n ['LocalDateTime', '本地日期时间', 'LocalDateTime'],\r\n ['ZonedDateTime', '带时区日期时间', 'ZonedDateTime'],\r\n ['Instant', '时间戳', 'Instant'],\r\n ['Duration', '时间段', 'Duration'],\r\n ['Period', '日期段', 'Period'],\r\n ['DateTimeFormatter', '日期格式化', 'DateTimeFormatter'],\r\n \r\n // IO类\r\n ['File', '文件', 'File'],\r\n ['Path', '路径', 'Path'],\r\n ['Paths', '路径工具', 'Paths'],\r\n ['Files', '文件工具', 'Files'],\r\n ['InputStream', '输入流', 'InputStream'],\r\n ['OutputStream', '输出流', 'OutputStream'],\r\n ['FileInputStream', '文件输入流', 'FileInputStream'],\r\n ['FileOutputStream', '文件输出流', 'FileOutputStream'],\r\n ['BufferedReader', '缓冲读取器', 'BufferedReader'],\r\n ['BufferedWriter', '缓冲写入器', 'BufferedWriter'],\r\n ['Reader', '读取器', 'Reader'],\r\n ['Writer', '写入器', 'Writer'],\r\n \r\n // 其他常用\r\n ['BigDecimal', '高精度小数', 'BigDecimal'],\r\n ['BigInteger', '高精度整数', 'BigInteger'],\r\n ['UUID', 'UUID', 'UUID'],\r\n ['Random', '随机数', 'Random'],\r\n ['Pattern', '正则模式', 'Pattern'],\r\n ['Matcher', '正则匹配器', 'Matcher'],\r\n ['Scanner', '扫描器', 'Scanner'],\r\n ['Enum', '枚举基类', 'Enum'],\r\n ['Annotation', '注解接口', 'Annotation'],\r\n ['Override', '重写注解', '@Override'],\r\n ['Deprecated', '弃用注解', '@Deprecated'],\r\n ['SuppressWarnings', '抑制警告', '@SuppressWarnings(\"$1\")'],\r\n ];\r\n keywords.filter(([label]) => label.toLowerCase().startsWith(currentWord)).forEach(([label, detail, text]) => {\r\n suggestions.push({ \r\n label, \r\n detail, \r\n insertText: text, \r\n range, \r\n kind: monaco.languages.CompletionItemKind.Keyword, \r\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\r\n sortText: '0' + label, // 优先显示\r\n });\r\n });\r\n }\r\n\r\n // 注解\r\n if (before.endsWith('@') || /@\\w*$/.test(before)) {\r\n const annotations: [string, string, string][] = [\r\n ['@Override', '重写方法', '@Override'],\r\n ['@Deprecated', '已弃用', '@Deprecated'],\r\n ['@SuppressWarnings', '抑制警告', '@SuppressWarnings(\"$1\")'],\r\n ['@FunctionalInterface', '函数式接口', '@FunctionalInterface'],\r\n ['@SafeVarargs', '安全可变参数', '@SafeVarargs'],\r\n ['@Autowired', 'Spring自动注入', '@Autowired'],\r\n ['@Component', 'Spring组件', '@Component'],\r\n ['@Service', 'Spring服务', '@Service'],\r\n ['@Repository', 'Spring仓库', '@Repository'],\r\n ['@Controller', 'Spring控制器', '@Controller'],\r\n ['@RestController', 'REST控制器', '@RestController'],\r\n ['@RequestMapping', '请求映射', '@RequestMapping(\"$1\")'],\r\n ['@GetMapping', 'GET请求', '@GetMapping(\"$1\")'],\r\n ['@PostMapping', 'POST请求', '@PostMapping(\"$1\")'],\r\n ['@PutMapping', 'PUT请求', '@PutMapping(\"$1\")'],\r\n ['@DeleteMapping', 'DELETE请求', '@DeleteMapping(\"$1\")'],\r\n ['@PathVariable', '路径变量', '@PathVariable'],\r\n ['@RequestParam', '请求参数', '@RequestParam'],\r\n ['@RequestBody', '请求体', '@RequestBody'],\r\n ['@ResponseBody', '响应体', '@ResponseBody'],\r\n ['@Bean', 'Spring Bean', '@Bean'],\r\n ['@Configuration', '配置类', '@Configuration'],\r\n ['@Value', '注入值', '@Value(\"${$1}\")'],\r\n ['@Transactional', '事务', '@Transactional'],\r\n ['@Slf4j', 'Lombok日志', '@Slf4j'],\r\n ['@Data', 'Lombok数据类', '@Data'],\r\n ['@Getter', 'Lombok Getter', '@Getter'],\r\n ['@Setter', 'Lombok Setter', '@Setter'],\r\n ['@NoArgsConstructor', '无参构造', '@NoArgsConstructor'],\r\n ['@AllArgsConstructor', '全参构造', '@AllArgsConstructor'],\r\n ['@Builder', 'Lombok Builder', '@Builder'],\r\n ['@ToString', 'Lombok ToString', '@ToString'],\r\n ['@EqualsAndHashCode', 'Lombok Equals/HashCode', '@EqualsAndHashCode'],\r\n ['@Test', 'JUnit测试', '@Test'],\r\n ['@BeforeEach', 'JUnit前置', '@BeforeEach'],\r\n ['@AfterEach', 'JUnit后置', '@AfterEach'],\r\n ['@Nullable', '可空', '@Nullable'],\r\n ['@NotNull', '非空', '@NotNull'],\r\n ['@Valid', '验证', '@Valid'],\r\n ];\r\n const atIndex = before.lastIndexOf('@');\r\n const typed = before.substring(atIndex + 1).toLowerCase();\r\n const annotationRange = {\r\n startLineNumber: position.lineNumber,\r\n endLineNumber: position.lineNumber,\r\n startColumn: atIndex + 1,\r\n endColumn: position.column,\r\n };\r\n annotations.filter(([label]) => typed.length === 0 || label.toLowerCase().includes(typed)).forEach(([label, detail, text]) => {\r\n suggestions.push({ label, detail, insertText: text, range: annotationRange, kind: monaco.languages.CompletionItemKind.Interface, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet });\r\n });\r\n }\r\n\r\n // 常用方法 - 在 . 后触发\r\n if (before.endsWith('.')) {\r\n const methods: [string, string, string][] = [\r\n // Object 方法\r\n ['toString()', '转字符串', 'toString()'],\r\n ['equals()', '比较相等', 'equals($1)'],\r\n ['hashCode()', '哈希码', 'hashCode()'],\r\n ['getClass()', '获取类', 'getClass()'],\r\n // String 方法\r\n ['length()', '字符串长度', 'length()'],\r\n ['isEmpty()', '是否为空', 'isEmpty()'],\r\n ['isBlank()', '是否空白', 'isBlank()'],\r\n ['trim()', '去除空格', 'trim()'],\r\n ['strip()', '去除空白', 'strip()'],\r\n ['toLowerCase()', '转小写', 'toLowerCase()'],\r\n ['toUpperCase()', '转大写', 'toUpperCase()'],\r\n ['substring()', '截取子串', 'substring($1, $2)'],\r\n ['charAt()', '获取字符', 'charAt($1)'],\r\n ['indexOf()', '查找索引', 'indexOf($1)'],\r\n ['lastIndexOf()', '最后索引', 'lastIndexOf($1)'],\r\n ['contains()', '是否包含', 'contains($1)'],\r\n ['startsWith()', '是否开头', 'startsWith($1)'],\r\n ['endsWith()', '是否结尾', 'endsWith($1)'],\r\n ['replace()', '替换', 'replace($1, $2)'],\r\n ['replaceAll()', '正则替换', 'replaceAll($1, $2)'],\r\n ['split()', '分割', 'split($1)'],\r\n ['join()', '连接', 'join($1, $2)'],\r\n ['format()', '格式化', 'format($1)'],\r\n ['matches()', '正则匹配', 'matches($1)'],\r\n // Collection 方法\r\n ['add()', '添加元素', 'add($1)'],\r\n ['addAll()', '添加所有', 'addAll($1)'],\r\n ['remove()', '移除元素', 'remove($1)'],\r\n ['removeAll()', '移除所有', 'removeAll($1)'],\r\n ['clear()', '清空', 'clear()'],\r\n ['size()', '大小', 'size()'],\r\n ['get()', '获取元素', 'get($1)'],\r\n ['set()', '设置元素', 'set($1, $2)'],\r\n ['contains()', '是否包含', 'contains($1)'],\r\n ['containsAll()', '是否包含所有', 'containsAll($1)'],\r\n ['iterator()', '迭代器', 'iterator()'],\r\n ['toArray()', '转数组', 'toArray()'],\r\n ['stream()', '流', 'stream()'],\r\n ['forEach()', '遍历', 'forEach($1 -> $2)'],\r\n // Map 方法\r\n ['put()', '放入', 'put($1, $2)'],\r\n ['putAll()', '放入所有', 'putAll($1)'],\r\n ['get()', '获取', 'get($1)'],\r\n ['getOrDefault()', '获取或默认', 'getOrDefault($1, $2)'],\r\n ['containsKey()', '包含键', 'containsKey($1)'],\r\n ['containsValue()', '包含值', 'containsValue($1)'],\r\n ['keySet()', '键集合', 'keySet()'],\r\n ['values()', '值集合', 'values()'],\r\n ['entrySet()', '条目集合', 'entrySet()'],\r\n // Stream 方法\r\n ['filter()', '过滤', 'filter($1 -> $2)'],\r\n ['map()', '映射', 'map($1 -> $2)'],\r\n ['flatMap()', '扁平映射', 'flatMap($1 -> $2)'],\r\n ['sorted()', '排序', 'sorted()'],\r\n ['distinct()', '去重', 'distinct()'],\r\n ['limit()', '限制', 'limit($1)'],\r\n ['skip()', '跳过', 'skip($1)'],\r\n ['collect()', '收集', 'collect(Collectors.$1)'],\r\n ['toList()', '转列表', 'toList()'],\r\n ['findFirst()', '查找第一个', 'findFirst()'],\r\n ['findAny()', '查找任意', 'findAny()'],\r\n ['anyMatch()', '任意匹配', 'anyMatch($1 -> $2)'],\r\n ['allMatch()', '全部匹配', 'allMatch($1 -> $2)'],\r\n ['noneMatch()', '无匹配', 'noneMatch($1 -> $2)'],\r\n ['count()', '计数', 'count()'],\r\n ['reduce()', '归约', 'reduce($1, ($2, $3) -> $4)'],\r\n // Optional 方法\r\n ['isPresent()', '是否存在', 'isPresent()'],\r\n ['isEmpty()', '是否为空', 'isEmpty()'],\r\n ['get()', '获取值', 'get()'],\r\n ['orElse()', '或者', 'orElse($1)'],\r\n ['orElseGet()', '或者获取', 'orElseGet(() -> $1)'],\r\n ['orElseThrow()', '或者抛出', 'orElseThrow(() -> new $1())'],\r\n ['ifPresent()', '如果存在', 'ifPresent($1 -> $2)'],\r\n ['map()', '映射', 'map($1 -> $2)'],\r\n ['flatMap()', '扁平映射', 'flatMap($1 -> $2)'],\r\n ['filter()', '过滤', 'filter($1 -> $2)'],\r\n // 打印\r\n ['println()', '打印换行', 'println($1)'],\r\n ['print()', '打印', 'print($1)'],\r\n ['printf()', '格式化打印', 'printf($1)'],\r\n ];\r\n methods.forEach(([label, detail, text]) => {\r\n suggestions.push({ label, detail, insertText: text, range, kind: monaco.languages.CompletionItemKind.Method, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet });\r\n });\r\n }\r\n\r\n // 代码片段\r\n if (currentWord.length >= 1) {\r\n const snippets: [string, string, string][] = [\r\n // 输出\r\n ['sout', 'System.out.println', 'System.out.println($1);'],\r\n ['soutv', '打印变量', 'System.out.println(\"$1 = \" + $1);'],\r\n ['serr', 'System.err.println', 'System.err.println($1);'],\r\n ['souf', 'System.out.printf', 'System.out.printf(\"$1%n\", $2);'],\r\n \r\n // main方法\r\n ['psvm', 'main方法', 'public static void main(String[] args) {\\n $1\\n}'],\r\n ['main', 'main方法', 'public static void main(String[] args) {\\n $1\\n}'],\r\n \r\n // 方法定义\r\n ['pub', 'public方法', 'public $1 $2($3) {\\n $4\\n}'],\r\n ['priv', 'private方法', 'private $1 $2($3) {\\n $4\\n}'],\r\n ['prot', 'protected方法', 'protected $1 $2($3) {\\n $4\\n}'],\r\n ['pubsf', 'public static final', 'public static final $1 $2 = $3;'],\r\n ['privsf', 'private static final', 'private static final $1 $2 = $3;'],\r\n \r\n // 循环\r\n ['fori', 'for i循环', 'for (int i = 0; i < $1; i++) {\\n $2\\n}'],\r\n ['forr', 'for 倒序循环', 'for (int i = $1 - 1; i >= 0; i--) {\\n $2\\n}'],\r\n ['fore', '增强for循环', 'for ($1 $2 : $3) {\\n $4\\n}'],\r\n ['iter', '迭代器循环', 'for (Iterator<$1> it = $2.iterator(); it.hasNext(); ) {\\n $1 $3 = it.next();\\n $4\\n}'],\r\n ['while', 'while循环', 'while ($1) {\\n $2\\n}'],\r\n ['dowhile', 'do-while循环', 'do {\\n $1\\n} while ($2);'],\r\n \r\n // 条件\r\n ['ife', 'if-else', 'if ($1) {\\n $2\\n} else {\\n $3\\n}'],\r\n ['ifn', 'if null', 'if ($1 == null) {\\n $2\\n}'],\r\n ['ifnn', 'if not null', 'if ($1 != null) {\\n $2\\n}'],\r\n ['tern', '三元表达式', '$1 ? $2 : $3'],\r\n \r\n // 异常\r\n ['tryc', 'try-catch', 'try {\\n $1\\n} catch (Exception e) {\\n $2\\n}'],\r\n ['trycf', 'try-catch-finally', 'try {\\n $1\\n} catch (Exception e) {\\n $2\\n} finally {\\n $3\\n}'],\r\n ['tryr', 'try-with-resources', 'try ($1) {\\n $2\\n} catch (Exception e) {\\n $3\\n}'],\r\n ['throw', '抛出异常', 'throw new $1(\"$2\");'],\r\n \r\n // 集合创建\r\n ['lst', 'new ArrayList', 'List<$1> $2 = new ArrayList<>();'],\r\n ['lstaof', 'List.of', 'List.of($1)'],\r\n ['map', 'new HashMap', 'Map<$1, $2> $3 = new HashMap<>();'],\r\n ['mapof', 'Map.of', 'Map.of($1, $2)'],\r\n ['set', 'new HashSet', 'Set<$1> $2 = new HashSet<>();'],\r\n ['setof', 'Set.of', 'Set.of($1)'],\r\n \r\n // Stream\r\n ['stream', 'stream操作', '$1.stream()\\n .filter($2 -> $3)\\n .map($4 -> $5)\\n .collect(Collectors.toList())'],\r\n ['streamf', 'stream filter', '$1.stream().filter($2 -> $3).collect(Collectors.toList())'],\r\n ['streamm', 'stream map', '$1.stream().map($2 -> $3).collect(Collectors.toList())'],\r\n ['foreach', 'forEach', '$1.forEach($2 -> {\\n $3\\n});'],\r\n \r\n // Optional\r\n ['opt', 'Optional.of', 'Optional.of($1)'],\r\n ['optn', 'Optional.ofNullable', 'Optional.ofNullable($1)'],\r\n ['opte', 'Optional.empty', 'Optional.empty()'],\r\n \r\n // 日志\r\n ['log', 'log.info', 'log.info(\"$1\");'],\r\n ['logd', 'log.debug', 'log.debug(\"$1\");'],\r\n ['logw', 'log.warn', 'log.warn(\"$1\");'],\r\n ['loge', 'log.error', 'log.error(\"$1\", $2);'],\r\n ['logt', 'log.trace', 'log.trace(\"$1\");'],\r\n ['logv', 'log变量', 'log.info(\"$1 = {}\", $1);'],\r\n \r\n // 测试\r\n ['test', '@Test方法', '@Test\\nvoid $1() {\\n $2\\n}'],\r\n ['testd', '@Test带DisplayName', '@Test\\n@DisplayName(\"$1\")\\nvoid $2() {\\n $3\\n}'],\r\n ['before', '@BeforeEach', '@BeforeEach\\nvoid setUp() {\\n $1\\n}'],\r\n ['after', '@AfterEach', '@AfterEach\\nvoid tearDown() {\\n $1\\n}'],\r\n ['aseq', 'assertEquals', 'assertEquals($1, $2);'],\r\n ['asne', 'assertNotEquals', 'assertNotEquals($1, $2);'],\r\n ['ast', 'assertTrue', 'assertTrue($1);'],\r\n ['asf', 'assertFalse', 'assertFalse($1);'],\r\n ['asn', 'assertNull', 'assertNull($1);'],\r\n ['asnn', 'assertNotNull', 'assertNotNull($1);'],\r\n ['asth', 'assertThrows', 'assertThrows($1.class, () -> {\\n $2\\n});'],\r\n \r\n // Lambda\r\n ['lam', 'lambda表达式', '($1) -> $2'],\r\n ['lamb', 'lambda块', '($1) -> {\\n $2\\n}'],\r\n ['mr', '方法引用', '$1::$2'],\r\n \r\n // 构造器\r\n ['ctor', '构造方法', 'public $1($2) {\\n $3\\n}'],\r\n ['ctord', '默认构造方法', 'public $1() {\\n}'],\r\n \r\n // getter/setter\r\n ['get', 'getter方法', 'public $1 get$2() {\\n return this.$3;\\n}'],\r\n ['set', 'setter方法', 'public void set$1($2 $3) {\\n this.$3 = $3;\\n}'],\r\n ['getset', 'getter和setter', 'public $1 get$2() {\\n return this.$3;\\n}\\n\\npublic void set$2($1 $3) {\\n this.$3 = $3;\\n}'],\r\n \r\n // toString/equals/hashCode\r\n ['tostr', 'toString方法', '@Override\\npublic String toString() {\\n return \"$1{\" +\\n \"$2=\" + $2 +\\n \\'}\\';\\n}'],\r\n ['eqhc', 'equals和hashCode', '@Override\\npublic boolean equals(Object o) {\\n if (this == o) return true;\\n if (o == null || getClass() != o.getClass()) return false;\\n $1 that = ($1) o;\\n return Objects.equals($2, that.$2);\\n}\\n\\n@Override\\npublic int hashCode() {\\n return Objects.hash($2);\\n}'],\r\n \r\n // 单例\r\n ['singleton', '单例模式', 'private static final $1 INSTANCE = new $1();\\n\\nprivate $1() {}\\n\\npublic static $1 getInstance() {\\n return INSTANCE;\\n}'],\r\n \r\n // 日期时间\r\n ['now', 'LocalDateTime.now', 'LocalDateTime.now()'],\r\n ['today', 'LocalDate.now', 'LocalDate.now()'],\r\n ['dtf', 'DateTimeFormatter', 'DateTimeFormatter.ofPattern(\"$1\")'],\r\n ];\r\n snippets.filter(([label]) => label.toLowerCase().startsWith(currentWord)).forEach(([label, detail, text]) => {\r\n suggestions.push({ \r\n label, \r\n detail, \r\n insertText: text, \r\n range, \r\n kind: monaco.languages.CompletionItemKind.Snippet, \r\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\r\n sortText: '1' + label, // 片段稍后显示\r\n });\r\n });\r\n }\r\n\r\n return { suggestions };\r\n },\r\n });\r\n}\r\n\r\nexport {\r\n conf,\r\n language,\r\n registerJavaCompletion,\r\n defineJavaThemes\r\n};"],"mappings":"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"}
|