@likec4/language-server 1.10.1 → 1.11.0
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/browser.cjs +5 -1
- package/dist/browser.d.cts +7 -5
- package/dist/browser.d.mts +7 -5
- package/dist/browser.d.ts +7 -5
- package/dist/browser.mjs +3 -2
- package/dist/index.cjs +15 -2
- package/dist/index.d.cts +14 -11
- package/dist/index.d.mts +14 -11
- package/dist/index.d.ts +14 -11
- package/dist/index.mjs +17 -1
- package/dist/likec4lib.cjs +949 -952
- package/dist/likec4lib.d.cts +1 -1
- package/dist/likec4lib.d.mts +1 -1
- package/dist/likec4lib.d.ts +1 -1
- package/dist/likec4lib.mjs +949 -952
- package/dist/protocol.cjs +1 -1
- package/dist/protocol.d.cts +3 -1
- package/dist/protocol.d.mts +3 -1
- package/dist/protocol.d.ts +3 -1
- package/dist/protocol.mjs +1 -1
- package/dist/shared/{language-server.Bfc-5M8A.cjs → language-server.C8lV6gDw.cjs} +116 -115
- package/dist/shared/{language-server.BFBeyvV8.mjs → language-server.CCOotWDz.mjs} +116 -116
- package/dist/shared/{language-server.CnVuAxDh.d.ts → language-server.Cyw-bCtc.d.ts} +143 -136
- package/dist/shared/{language-server.DEK39RmI.d.mts → language-server.DGjTE7xL.d.mts} +143 -136
- package/dist/shared/{language-server.BGy3FJPJ.d.cts → language-server.Ol32Kygo.d.cts} +143 -136
- package/package.json +30 -26
- package/src/Rpc.ts +10 -6
- package/src/ast.ts +1 -1
- package/src/browser.ts +5 -0
- package/src/generated-lib/icons.ts +949 -952
- package/src/index.ts +23 -2
- package/src/likec4lib.ts +1 -1
- package/src/logger.ts +16 -16
- package/src/model/model-builder.ts +12 -12
- package/src/model-graph/utils/applyCustomRelationProperties.ts +1 -1
- package/src/protocol.ts +5 -1
- package/src/shared/WorkspaceManager.ts +1 -1
- package/dist/node.cjs +0 -18
- package/dist/node.d.cts +0 -19
- package/dist/node.d.mts +0 -19
- package/dist/node.d.ts +0 -19
- package/dist/node.mjs +0 -16
- package/src/node.ts +0 -20
package/dist/protocol.cjs
CHANGED
|
@@ -6,7 +6,7 @@ const onDidChangeModel = new vscodeJsonrpc.NotificationType("likec4/onDidChangeM
|
|
|
6
6
|
const fetchModel = new vscodeJsonrpc.RequestType0(
|
|
7
7
|
"likec4/fetchModel"
|
|
8
8
|
);
|
|
9
|
-
const fetchComputedModel = new vscodeJsonrpc.
|
|
9
|
+
const fetchComputedModel = new vscodeJsonrpc.RequestType(
|
|
10
10
|
"likec4/fetchComputedModel"
|
|
11
11
|
);
|
|
12
12
|
const computeView = new vscodeJsonrpc.RequestType(
|
package/dist/protocol.d.cts
CHANGED
|
@@ -8,7 +8,9 @@ declare const fetchModel: RequestType0<{
|
|
|
8
8
|
model: ParsedLikeC4Model | null;
|
|
9
9
|
}, void>;
|
|
10
10
|
type FetchModelRequest = typeof fetchModel;
|
|
11
|
-
declare const fetchComputedModel:
|
|
11
|
+
declare const fetchComputedModel: RequestType<{
|
|
12
|
+
cleanCaches?: boolean | undefined;
|
|
13
|
+
}, {
|
|
12
14
|
model: ComputedLikeC4Model | null;
|
|
13
15
|
}, void>;
|
|
14
16
|
type FetchComputedModelRequest = typeof fetchComputedModel;
|
package/dist/protocol.d.mts
CHANGED
|
@@ -8,7 +8,9 @@ declare const fetchModel: RequestType0<{
|
|
|
8
8
|
model: ParsedLikeC4Model | null;
|
|
9
9
|
}, void>;
|
|
10
10
|
type FetchModelRequest = typeof fetchModel;
|
|
11
|
-
declare const fetchComputedModel:
|
|
11
|
+
declare const fetchComputedModel: RequestType<{
|
|
12
|
+
cleanCaches?: boolean | undefined;
|
|
13
|
+
}, {
|
|
12
14
|
model: ComputedLikeC4Model | null;
|
|
13
15
|
}, void>;
|
|
14
16
|
type FetchComputedModelRequest = typeof fetchComputedModel;
|
package/dist/protocol.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ declare const fetchModel: RequestType0<{
|
|
|
8
8
|
model: ParsedLikeC4Model | null;
|
|
9
9
|
}, void>;
|
|
10
10
|
type FetchModelRequest = typeof fetchModel;
|
|
11
|
-
declare const fetchComputedModel:
|
|
11
|
+
declare const fetchComputedModel: RequestType<{
|
|
12
|
+
cleanCaches?: boolean | undefined;
|
|
13
|
+
}, {
|
|
12
14
|
model: ComputedLikeC4Model | null;
|
|
13
15
|
}, void>;
|
|
14
16
|
type FetchComputedModelRequest = typeof fetchComputedModel;
|
package/dist/protocol.mjs
CHANGED
|
@@ -4,7 +4,7 @@ const onDidChangeModel = new NotificationType("likec4/onDidChangeModel");
|
|
|
4
4
|
const fetchModel = new RequestType0(
|
|
5
5
|
"likec4/fetchModel"
|
|
6
6
|
);
|
|
7
|
-
const fetchComputedModel = new
|
|
7
|
+
const fetchComputedModel = new RequestType(
|
|
8
8
|
"likec4/fetchComputedModel"
|
|
9
9
|
);
|
|
10
10
|
const computeView = new RequestType(
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
const langium = require('langium');
|
|
4
4
|
const lsp = require('langium/lsp');
|
|
5
5
|
const log = require('@likec4/log');
|
|
6
|
-
const core = require('@likec4/core');
|
|
7
6
|
const remeda = require('remeda');
|
|
7
|
+
const core = require('@likec4/core');
|
|
8
8
|
const vscodeLanguageserverTypes = require('vscode-languageserver-types');
|
|
9
9
|
const indentString = require('indent-string');
|
|
10
10
|
const msgpack = require('@msgpack/msgpack');
|
|
@@ -26,95 +26,6 @@ const indentString__default = /*#__PURE__*/_interopDefaultCompat(indentString);
|
|
|
26
26
|
const stripIndent__default = /*#__PURE__*/_interopDefaultCompat(stripIndent);
|
|
27
27
|
const hash__default = /*#__PURE__*/_interopDefaultCompat(hash);
|
|
28
28
|
|
|
29
|
-
const logger = log.rootLogger.withTag("lsp");
|
|
30
|
-
function logError(err) {
|
|
31
|
-
logger.error(err);
|
|
32
|
-
}
|
|
33
|
-
function logWarnError(err) {
|
|
34
|
-
if (err instanceof Error) {
|
|
35
|
-
logger.warn(err.stack ?? err.message);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
logger.warn(err);
|
|
39
|
-
}
|
|
40
|
-
function setLogLevel(level) {
|
|
41
|
-
logger.level = log.LogLevels[level];
|
|
42
|
-
}
|
|
43
|
-
function logErrorToTelemetry(connection) {
|
|
44
|
-
const reporter = {
|
|
45
|
-
log: ({ level, ...logObj }, ctx) => {
|
|
46
|
-
if (level !== log.LogLevels.error && level !== log.LogLevels.fatal) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
const tag = logObj.tag || "";
|
|
50
|
-
const parts = logObj.args.map((arg) => {
|
|
51
|
-
if (arg && typeof arg.stack === "string") {
|
|
52
|
-
return arg.message + "\n" + arg.stack;
|
|
53
|
-
}
|
|
54
|
-
if (typeof arg === "string") {
|
|
55
|
-
return arg;
|
|
56
|
-
}
|
|
57
|
-
return String(arg);
|
|
58
|
-
});
|
|
59
|
-
if (tag) {
|
|
60
|
-
parts.unshift(`[${tag}]`);
|
|
61
|
-
}
|
|
62
|
-
const message = parts.join(" ");
|
|
63
|
-
connection.telemetry.logEvent({ eventName: "error", error: message });
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
log.rootLogger.addReporter(reporter);
|
|
67
|
-
logger.setReporters(log.rootLogger.options.reporters);
|
|
68
|
-
}
|
|
69
|
-
function logToLspConnection(connection) {
|
|
70
|
-
const reporter = {
|
|
71
|
-
log: ({ level, ...logObj }, ctx) => {
|
|
72
|
-
const tag = logObj.tag || "";
|
|
73
|
-
const parts = logObj.args.map((arg) => {
|
|
74
|
-
if (arg && typeof arg.stack === "string") {
|
|
75
|
-
return arg.message + "\n" + arg.stack;
|
|
76
|
-
}
|
|
77
|
-
if (typeof arg === "string") {
|
|
78
|
-
return arg;
|
|
79
|
-
}
|
|
80
|
-
return String(arg);
|
|
81
|
-
});
|
|
82
|
-
if (tag) {
|
|
83
|
-
parts.unshift(`[${tag}]`);
|
|
84
|
-
}
|
|
85
|
-
const message = parts.join(" ");
|
|
86
|
-
switch (true) {
|
|
87
|
-
case level >= log.LogLevels.trace: {
|
|
88
|
-
connection.tracer.log(message);
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
case level >= log.LogLevels.debug: {
|
|
92
|
-
connection.console.debug(message);
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
case level >= log.LogLevels.info: {
|
|
96
|
-
connection.console.info(message);
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
case level >= log.LogLevels.log: {
|
|
100
|
-
connection.console.log(message);
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
case level >= log.LogLevels.warn: {
|
|
104
|
-
connection.console.warn(message);
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
case level >= log.LogLevels.fatal: {
|
|
108
|
-
connection.console.error(message);
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
log.rootLogger.addReporter(reporter);
|
|
115
|
-
logger.setReporters(log.rootLogger.options.reporters);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
29
|
const DynamicViewRule = "DynamicViewRule";
|
|
119
30
|
function isDynamicViewRule(item) {
|
|
120
31
|
return reflection.isInstance(item, DynamicViewRule);
|
|
@@ -1496,6 +1407,94 @@ const LikeC4GeneratedModule = {
|
|
|
1496
1407
|
}
|
|
1497
1408
|
};
|
|
1498
1409
|
|
|
1410
|
+
const logger = log.rootLogger.withTag("lsp");
|
|
1411
|
+
function logError(err) {
|
|
1412
|
+
logger.error(err);
|
|
1413
|
+
}
|
|
1414
|
+
function logWarnError(err) {
|
|
1415
|
+
if (err instanceof Error) {
|
|
1416
|
+
logger.warn(err.stack ?? err.message);
|
|
1417
|
+
return;
|
|
1418
|
+
}
|
|
1419
|
+
logger.warn(err);
|
|
1420
|
+
}
|
|
1421
|
+
function setLogLevel(level) {
|
|
1422
|
+
logger.level = log.LogLevels[level];
|
|
1423
|
+
}
|
|
1424
|
+
function logErrorToTelemetry(connection) {
|
|
1425
|
+
const reporter = {
|
|
1426
|
+
log: ({ level, ...logObj }, ctx) => {
|
|
1427
|
+
if (level !== log.LogLevels.error && level !== log.LogLevels.fatal) {
|
|
1428
|
+
return;
|
|
1429
|
+
}
|
|
1430
|
+
const tag = logObj.tag || "";
|
|
1431
|
+
const parts = logObj.args.map((arg) => {
|
|
1432
|
+
if (remeda.isError(arg)) {
|
|
1433
|
+
return arg.stack ?? arg.message;
|
|
1434
|
+
}
|
|
1435
|
+
if (typeof arg === "string") {
|
|
1436
|
+
return arg;
|
|
1437
|
+
}
|
|
1438
|
+
return "" + arg;
|
|
1439
|
+
});
|
|
1440
|
+
if (tag) {
|
|
1441
|
+
parts.unshift(`[${tag}]`);
|
|
1442
|
+
}
|
|
1443
|
+
const message = parts.join(" ");
|
|
1444
|
+
connection.telemetry.logEvent({ eventName: "error", error: message });
|
|
1445
|
+
}
|
|
1446
|
+
};
|
|
1447
|
+
log.rootLogger.addReporter(reporter);
|
|
1448
|
+
logger.setReporters(log.rootLogger.options.reporters);
|
|
1449
|
+
}
|
|
1450
|
+
function logToLspConnection(connection) {
|
|
1451
|
+
const reporter = {
|
|
1452
|
+
log: ({ level, ...logObj }, ctx) => {
|
|
1453
|
+
const tag = logObj.tag || "";
|
|
1454
|
+
const parts = logObj.args.map((arg) => {
|
|
1455
|
+
if (remeda.isError(arg)) {
|
|
1456
|
+
return arg.stack ?? arg.message;
|
|
1457
|
+
}
|
|
1458
|
+
if (typeof arg === "string") {
|
|
1459
|
+
return arg;
|
|
1460
|
+
}
|
|
1461
|
+
return "" + arg;
|
|
1462
|
+
});
|
|
1463
|
+
if (tag) {
|
|
1464
|
+
parts.unshift(`[${tag}]`);
|
|
1465
|
+
}
|
|
1466
|
+
const message = parts.join(" ");
|
|
1467
|
+
switch (true) {
|
|
1468
|
+
case level >= log.LogLevels.debug: {
|
|
1469
|
+
connection.console.debug(message);
|
|
1470
|
+
break;
|
|
1471
|
+
}
|
|
1472
|
+
// case level >= LogLevels.info: {
|
|
1473
|
+
// connection.console.info(message)
|
|
1474
|
+
// break
|
|
1475
|
+
// }
|
|
1476
|
+
case level >= log.LogLevels.log: {
|
|
1477
|
+
connection.console.info(message);
|
|
1478
|
+
break;
|
|
1479
|
+
}
|
|
1480
|
+
case level >= log.LogLevels.warn: {
|
|
1481
|
+
connection.console.warn(message);
|
|
1482
|
+
break;
|
|
1483
|
+
}
|
|
1484
|
+
case level >= log.LogLevels.fatal: {
|
|
1485
|
+
connection.console.error(message);
|
|
1486
|
+
break;
|
|
1487
|
+
}
|
|
1488
|
+
default: {
|
|
1489
|
+
connection.console.log(message);
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
};
|
|
1494
|
+
log.rootLogger.setReporters([reporter]);
|
|
1495
|
+
logger.setReporters(log.rootLogger.options.reporters);
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1499
1498
|
function elementRef(node) {
|
|
1500
1499
|
return node.el.ref;
|
|
1501
1500
|
}
|
|
@@ -1617,7 +1616,7 @@ function checksFromDiagnostics(doc) {
|
|
|
1617
1616
|
};
|
|
1618
1617
|
}
|
|
1619
1618
|
function* streamModel(doc, isValid) {
|
|
1620
|
-
const traverseStack = doc.parseResult.value.models.flatMap((m) =>
|
|
1619
|
+
const traverseStack = doc.parseResult.value.models.flatMap((m) => m.elements);
|
|
1621
1620
|
const relations = [];
|
|
1622
1621
|
let el;
|
|
1623
1622
|
while (el = traverseStack.shift()) {
|
|
@@ -2548,8 +2547,6 @@ class FqnIndex {
|
|
|
2548
2547
|
}
|
|
2549
2548
|
}
|
|
2550
2549
|
|
|
2551
|
-
const printDocs = (docs) => docs.map((d) => " - " + d.uri.toString(true)).join("\n");
|
|
2552
|
-
|
|
2553
2550
|
function assignNavigateTo(views) {
|
|
2554
2551
|
const allElementViews = /* @__PURE__ */ new Map();
|
|
2555
2552
|
for (const v of views) {
|
|
@@ -2943,8 +2940,7 @@ class LikeC4ModelBuilder {
|
|
|
2943
2940
|
async (docs, _cancelToken) => {
|
|
2944
2941
|
let parsed = [];
|
|
2945
2942
|
try {
|
|
2946
|
-
logger.debug(`[ModelBuilder] onValidated (${docs.length} docs)
|
|
2947
|
-
${printDocs(docs)}`);
|
|
2943
|
+
logger.debug(`[ModelBuilder] onValidated (${docs.length} docs)`);
|
|
2948
2944
|
for (const doc of parser.parse(docs)) {
|
|
2949
2945
|
parsed.push(doc.uri);
|
|
2950
2946
|
}
|
|
@@ -2974,8 +2970,7 @@ ${printDocs(docs)}`);
|
|
|
2974
2970
|
logger.debug("[ModelBuilder] No documents to build model from");
|
|
2975
2971
|
return null;
|
|
2976
2972
|
}
|
|
2977
|
-
logger.debug(`[ModelBuilder]
|
|
2978
|
-
${printDocs(docs)}`);
|
|
2973
|
+
logger.debug(`[ModelBuilder] onValidated (${docs.length} docs)`);
|
|
2979
2974
|
return buildModel(this.services, docs);
|
|
2980
2975
|
});
|
|
2981
2976
|
}
|
|
@@ -3032,14 +3027,14 @@ ${printDocs(docs)}`);
|
|
|
3032
3027
|
if (cache.has(CACHE_KEY_COMPUTED_MODEL)) {
|
|
3033
3028
|
return cache.get(CACHE_KEY_COMPUTED_MODEL);
|
|
3034
3029
|
}
|
|
3035
|
-
const model = await this.buildModel(cancelToken);
|
|
3036
|
-
if (!model) {
|
|
3037
|
-
return null;
|
|
3038
|
-
}
|
|
3039
3030
|
return await this.services.shared.workspace.WorkspaceLock.read(async () => {
|
|
3040
3031
|
if (cancelToken) {
|
|
3041
3032
|
await langium.interruptAndCheck(cancelToken);
|
|
3042
3033
|
}
|
|
3034
|
+
const model = this.unsafeSyncBuildModel();
|
|
3035
|
+
if (!model) {
|
|
3036
|
+
return null;
|
|
3037
|
+
}
|
|
3043
3038
|
return this.unsafeSyncBuildComputedModel(model);
|
|
3044
3039
|
});
|
|
3045
3040
|
}
|
|
@@ -3049,17 +3044,17 @@ ${printDocs(docs)}`);
|
|
|
3049
3044
|
if (cache.has(cacheKey)) {
|
|
3050
3045
|
return cache.get(cacheKey);
|
|
3051
3046
|
}
|
|
3052
|
-
const model = await this.buildModel(cancelToken);
|
|
3053
|
-
const view = model?.views[viewId];
|
|
3054
|
-
if (!view) {
|
|
3055
|
-
logger.warn(`[ModelBuilder] Cannot find view ${viewId}`);
|
|
3056
|
-
return null;
|
|
3057
|
-
}
|
|
3058
3047
|
return await this.services.shared.workspace.WorkspaceLock.read(async () => {
|
|
3059
3048
|
if (cancelToken) {
|
|
3060
3049
|
await langium.interruptAndCheck(cancelToken);
|
|
3061
3050
|
}
|
|
3062
3051
|
return cache.get(cacheKey, () => {
|
|
3052
|
+
const model = this.unsafeSyncBuildModel();
|
|
3053
|
+
const view = model?.views[viewId];
|
|
3054
|
+
if (!view) {
|
|
3055
|
+
logger.warn(`[ModelBuilder] Cannot find view ${viewId}`);
|
|
3056
|
+
return null;
|
|
3057
|
+
}
|
|
3063
3058
|
const index = new LikeC4ModelGraph.LikeC4ModelGraph(model);
|
|
3064
3059
|
const result = core.isElementView(view) ? LikeC4ModelGraph.computeView(view, index) : LikeC4ModelGraph.computeDynamicView(view, index);
|
|
3065
3060
|
if (!result.isSuccess) {
|
|
@@ -4745,14 +4740,16 @@ class Rpc {
|
|
|
4745
4740
|
const LangiumDocuments = this.services.shared.workspace.LangiumDocuments;
|
|
4746
4741
|
const DocumentBuilder = this.services.shared.workspace.DocumentBuilder;
|
|
4747
4742
|
const notifyModelParsed = remeda.debounce(
|
|
4748
|
-
() =>
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4743
|
+
() => {
|
|
4744
|
+
connection.sendNotification(protocol.onDidChangeModel, "").catch((e) => {
|
|
4745
|
+
logger.error(`[ServerRpc] error sending onDidChangeModel: ${e}`);
|
|
4746
|
+
return Promise.resolve();
|
|
4747
|
+
});
|
|
4748
|
+
},
|
|
4752
4749
|
{
|
|
4753
4750
|
timing: "both",
|
|
4754
|
-
waitMs:
|
|
4755
|
-
maxWaitMs:
|
|
4751
|
+
waitMs: 300,
|
|
4752
|
+
maxWaitMs: 600
|
|
4756
4753
|
}
|
|
4757
4754
|
);
|
|
4758
4755
|
let isFirstBuild = true;
|
|
@@ -4761,7 +4758,10 @@ class Rpc {
|
|
|
4761
4758
|
notifyModelParsed.cancel();
|
|
4762
4759
|
}),
|
|
4763
4760
|
modelBuilder.onModelParsed(() => notifyModelParsed.call()),
|
|
4764
|
-
connection.onRequest(protocol.fetchComputedModel, async (cancelToken) => {
|
|
4761
|
+
connection.onRequest(protocol.fetchComputedModel, async ({ cleanCaches }, cancelToken) => {
|
|
4762
|
+
if (cleanCaches) {
|
|
4763
|
+
this.services.WorkspaceCache.clear();
|
|
4764
|
+
}
|
|
4765
4765
|
const model = await modelBuilder.buildComputedModel(cancelToken);
|
|
4766
4766
|
return { model };
|
|
4767
4767
|
}),
|
|
@@ -4937,8 +4937,8 @@ class LikeC4WorkspaceManager extends langium.DefaultWorkspaceManager {
|
|
|
4937
4937
|
* your language, which can be either loaded from provided files or constructed in memory.
|
|
4938
4938
|
*/
|
|
4939
4939
|
async loadAdditionalDocuments(folders, collector) {
|
|
4940
|
-
await super.loadAdditionalDocuments(folders, collector);
|
|
4941
4940
|
collector(this.documentFactory.fromString(likec4lib.Content, vscodeUri.URI.parse(likec4lib.Uri)));
|
|
4941
|
+
await super.loadAdditionalDocuments(folders, collector);
|
|
4942
4942
|
}
|
|
4943
4943
|
workspace() {
|
|
4944
4944
|
if (this.folders && core.hasAtLeast(this.folders, 1)) {
|
|
@@ -5746,4 +5746,5 @@ function _merge(target, source) {
|
|
|
5746
5746
|
exports.LikeC4Module = LikeC4Module;
|
|
5747
5747
|
exports.createCustomLanguageServices = createCustomLanguageServices;
|
|
5748
5748
|
exports.createLanguageServices = createLanguageServices;
|
|
5749
|
+
exports.logger = logger;
|
|
5749
5750
|
exports.setLogLevel = setLogLevel;
|