@mirascript/monaco 0.1.82 → 0.1.84

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.
Files changed (38) hide show
  1. package/dist/basic/index.js +2 -2
  2. package/dist/basic/tokens-provider.d.ts.map +1 -1
  3. package/dist/{chunk-NIQ5XOKS.js → chunk-7NT3EI6C.js} +31 -21
  4. package/dist/chunk-7NT3EI6C.js.map +6 -0
  5. package/dist/{chunk-NAOKM25O.js → chunk-JOHUNWDB.js} +25 -2
  6. package/dist/{chunk-NAOKM25O.js.map → chunk-JOHUNWDB.js.map} +2 -2
  7. package/dist/contribute.d.ts +1 -0
  8. package/dist/contribute.d.ts.map +1 -1
  9. package/dist/index.js +2 -23
  10. package/dist/index.js.map +2 -2
  11. package/dist/lsp/compile-result.d.ts +1 -1
  12. package/dist/lsp/compile-result.d.ts.map +1 -1
  13. package/dist/lsp/index.js +149 -179
  14. package/dist/lsp/index.js.map +1 -1
  15. package/dist/lsp/providers/color-provider.d.ts.map +1 -1
  16. package/dist/lsp/providers/hover-provider.d.ts.map +1 -1
  17. package/dist/lsp/providers/inlay-hints-provider.d.ts.map +1 -1
  18. package/dist/lsp/utils.d.ts.map +1 -1
  19. package/dist/lsp/worker-core.d.ts +23 -0
  20. package/dist/lsp/worker-core.d.ts.map +1 -0
  21. package/dist/lsp/worker.d.ts +1 -22
  22. package/dist/lsp/worker.d.ts.map +1 -1
  23. package/dist/lsp/worker.js +3 -45
  24. package/dist/lsp/worker.js.map +1 -1
  25. package/dist/worker-core-MG2FDDNN.js +45 -0
  26. package/dist/worker-core-MG2FDDNN.js.map +6 -0
  27. package/package.json +7 -9
  28. package/src/basic/tokens-provider.ts +32 -23
  29. package/src/contribute.ts +8 -8
  30. package/src/lsp/compile-result.ts +1 -1
  31. package/src/lsp/providers/color-provider.ts +42 -44
  32. package/src/lsp/providers/hover-provider.ts +27 -59
  33. package/src/lsp/providers/inlay-hints-provider.ts +93 -89
  34. package/src/lsp/utils.ts +1 -3
  35. package/src/lsp/worker-core.ts +68 -0
  36. package/src/lsp/worker-helper.ts +3 -3
  37. package/src/lsp/worker.ts +5 -70
  38. package/dist/chunk-NIQ5XOKS.js.map +0 -6
package/dist/lsp/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  REG_ORDINAL_FULL,
9
9
  RESERVED_KEYWORDS,
10
10
  isKeyword
11
- } from "../chunk-NIQ5XOKS.js";
11
+ } from "../chunk-7NT3EI6C.js";
12
12
  import {
13
13
  Emitter,
14
14
  MarkerSeverity,
@@ -18,7 +18,7 @@ import {
18
18
  Uri,
19
19
  editor,
20
20
  languages
21
- } from "../chunk-NAOKM25O.js";
21
+ } from "../chunk-JOHUNWDB.js";
22
22
 
23
23
  // src/lsp/providers/base.ts
24
24
  import { DefaultVmContext } from "@mirascript/mirascript/subtle";
@@ -750,10 +750,8 @@ function valueDoc(name, value, type, parent) {
750
750
  prefix = `let ${name} = `;
751
751
  }
752
752
  suffix = ";";
753
- } else if (/^\d/.test(name)) {
754
- prefix = `[${name}]: `;
755
753
  } else {
756
- prefix = `${name}: `;
754
+ prefix = `${serializeRecordKey(name)}: `;
757
755
  }
758
756
  if (isVmModule(value)) {
759
757
  let script;
@@ -1073,7 +1071,7 @@ var compileImpl;
1073
1071
  async function compileSync(req) {
1074
1072
  const [key, version, script, mode] = req;
1075
1073
  if (compileImpl == null) {
1076
- const mod = await import("./worker.js");
1074
+ const mod = await import("../worker-core-MG2FDDNN.js");
1077
1075
  compileImpl = mod.compile;
1078
1076
  }
1079
1077
  const result = compileImpl(script, mode);
@@ -1470,6 +1468,12 @@ var CodeLensProvider = class extends Provider {
1470
1468
  import { DiagnosticCode as DiagnosticCode6 } from "@mirascript/constants";
1471
1469
  var REG_COLOR_STR = /^(@*)(['"`])(#(?:[0-9a-f]{6}|[0-9a-f]{3}|[0-9a-f]{8}|[0-9a-f]{4}))\2\1$/iu;
1472
1470
  var { parseInt } = Number;
1471
+ function parseColorPart(text) {
1472
+ if (text.length === 1) {
1473
+ text = text + text;
1474
+ }
1475
+ return parseInt(text, 16) / 255;
1476
+ }
1473
1477
  function parseColorString(text) {
1474
1478
  const colorMatch = REG_COLOR_STR.exec(text);
1475
1479
  if (!colorMatch) {
@@ -1481,34 +1485,21 @@ function parseColorString(text) {
1481
1485
  let color;
1482
1486
  if (colorString.startsWith("#")) {
1483
1487
  const colorCode = colorString.slice(1);
1484
- if (colorCode.length === 3) {
1485
- color = {
1486
- red: parseInt(colorCode[0] + colorCode[0], 16) / 255,
1487
- green: parseInt(colorCode[1] + colorCode[1], 16) / 255,
1488
- blue: parseInt(colorCode[2] + colorCode[2], 16) / 255,
1489
- alpha: 1
1490
- };
1491
- } else if (colorCode.length === 6) {
1492
- color = {
1493
- red: parseInt(colorCode.slice(0, 2), 16) / 255,
1494
- green: parseInt(colorCode.slice(2, 4), 16) / 255,
1495
- blue: parseInt(colorCode.slice(4, 6), 16) / 255,
1496
- alpha: 1
1497
- // 假设不透明
1498
- };
1499
- } else if (colorCode.length === 8) {
1488
+ if (colorCode.length === 3 || colorCode.length === 4) {
1500
1489
  color = {
1501
- red: parseInt(colorCode.slice(0, 2), 16) / 255,
1502
- green: parseInt(colorCode.slice(2, 4), 16) / 255,
1503
- blue: parseInt(colorCode.slice(4, 6), 16) / 255,
1504
- alpha: parseInt(colorCode.slice(6, 8), 16) / 255
1490
+ red: parseColorPart(colorCode[0]),
1491
+ green: parseColorPart(colorCode[1]),
1492
+ blue: parseColorPart(colorCode[2]),
1493
+ alpha: colorCode[3] ? parseColorPart(colorCode[3]) : 1
1494
+ // 如果没有 alpha,则假设不透明
1505
1495
  };
1506
- } else if (colorCode.length === 4) {
1496
+ } else if (colorCode.length === 6 || colorCode.length === 8) {
1507
1497
  color = {
1508
- red: parseInt(colorCode[0] + colorCode[0], 16) / 255,
1509
- green: parseInt(colorCode[1] + colorCode[1], 16) / 255,
1510
- blue: parseInt(colorCode[2] + colorCode[2], 16) / 255,
1511
- alpha: parseInt(colorCode[3] + colorCode[3], 16) / 255
1498
+ red: parseColorPart(colorCode.slice(0, 2)),
1499
+ green: parseColorPart(colorCode.slice(2, 4)),
1500
+ blue: parseColorPart(colorCode.slice(4, 6)),
1501
+ alpha: colorCode.length === 8 ? parseColorPart(colorCode.slice(6, 8)) : 1
1502
+ // 如果没有 alpha,则假设不透明
1512
1503
  };
1513
1504
  } else {
1514
1505
  return void 0;
@@ -1523,6 +1514,22 @@ function parseColorString(text) {
1523
1514
  color
1524
1515
  };
1525
1516
  }
1517
+ function serializeColorPart(part) {
1518
+ const intPart = Math.round(part * 255);
1519
+ const hex = intPart.toString(16).padStart(2, "0");
1520
+ return hex;
1521
+ }
1522
+ function serializeColor(color) {
1523
+ const r = serializeColorPart(color.red);
1524
+ const g = serializeColorPart(color.green);
1525
+ const b = serializeColorPart(color.blue);
1526
+ if (color.alpha >= 1) {
1527
+ return `#${r}${g}${b}`;
1528
+ } else {
1529
+ const a = serializeColorPart(color.alpha);
1530
+ return `#${r}${g}${b}${a}`;
1531
+ }
1532
+ }
1526
1533
  var ColorProvider = class extends Provider {
1527
1534
  /** @inheritdoc */
1528
1535
  async provideDocumentColors(model, token) {
@@ -1552,11 +1559,7 @@ var ColorProvider = class extends Provider {
1552
1559
  /** @inheritdoc */
1553
1560
  provideColorPresentations(model, colorInfo, token) {
1554
1561
  const { color } = colorInfo;
1555
- return [
1556
- {
1557
- label: `#${Math.round(color.red * 255).toString(16).padStart(2, "0")}${Math.round(color.green * 255).toString(16).padStart(2, "0")}${Math.round(color.blue * 255).toString(16).padStart(2, "0")}${color.alpha >= 1 ? "" : Math.round(color.alpha * 255).toString(16).padStart(2, "0")}`
1558
- }
1559
- ];
1562
+ return [{ label: serializeColor(color) }];
1560
1563
  }
1561
1564
  };
1562
1565
 
@@ -2340,6 +2343,22 @@ function operatorAt(lineContent, column) {
2340
2343
  }
2341
2344
  return void 0;
2342
2345
  }
2346
+ var LOCAL_HOVER = {
2347
+ [DiagnosticCode10.ParameterSubPatternImmutable]: "(parameter pattern) ",
2348
+ [DiagnosticCode10.ParameterSubPatternMutable]: "(parameter pattern) mut ",
2349
+ [DiagnosticCode10.ParameterImmutable]: "(parameter) ",
2350
+ [DiagnosticCode10.ParameterMutable]: "(parameter) mut ",
2351
+ [DiagnosticCode10.ParameterIt]: "(parameter) it",
2352
+ [DiagnosticCode10.ParameterImmutableRest]: "(parameter) ..",
2353
+ [DiagnosticCode10.ParameterMutableRest]: "(parameter) ..mut ",
2354
+ [DiagnosticCode10.LocalModule]: "mod ",
2355
+ [DiagnosticCode10.LocalImmutable]: "let ",
2356
+ [DiagnosticCode10.LocalConst]: "const ",
2357
+ [DiagnosticCode10.LocalMutable]: "let mut ",
2358
+ [DiagnosticCode10.LocalFunction]: (text, model, def) => {
2359
+ return `fn ${text}${paramsList(model, def.fn)}`;
2360
+ }
2361
+ };
2343
2362
  var HoverProvider = class extends Provider {
2344
2363
  /** 变量提示 */
2345
2364
  async provideVariableHover(model, { def, ref }) {
@@ -2357,69 +2376,18 @@ var HoverProvider = class extends Provider {
2357
2376
  } else {
2358
2377
  let content;
2359
2378
  const tag = def.definition;
2360
- switch (tag.code) {
2361
- case DiagnosticCode10.ParameterSubPatternImmutable:
2362
- content = {
2363
- value: codeblock(`\0(parameter pattern) ${model.getValueInRange(tag.range)}`)
2364
- };
2365
- break;
2366
- case DiagnosticCode10.ParameterSubPatternMutable:
2367
- content = {
2368
- value: codeblock(`\0(parameter pattern) mut ${model.getValueInRange(tag.range)}`)
2369
- };
2370
- break;
2371
- case DiagnosticCode10.ParameterImmutable:
2379
+ if (tag.code in LOCAL_HOVER) {
2380
+ const hover = LOCAL_HOVER[tag.code];
2381
+ const text = model.getValueInRange(tag.range);
2382
+ if (typeof hover == "string") {
2372
2383
  content = {
2373
- value: codeblock(`\0(parameter) ${model.getValueInRange(tag.range)}`)
2384
+ value: codeblock(`\0${hover}${text}`)
2374
2385
  };
2375
- break;
2376
- case DiagnosticCode10.ParameterMutable:
2377
- content = {
2378
- value: codeblock(`\0(parameter) mut ${model.getValueInRange(tag.range)}`)
2379
- };
2380
- break;
2381
- case DiagnosticCode10.ParameterIt:
2382
- content = {
2383
- value: codeblock(`\0(parameter) it`)
2384
- };
2385
- break;
2386
- case DiagnosticCode10.ParameterImmutableRest:
2387
- content = {
2388
- value: codeblock(`\0(parameter) ..${model.getValueInRange(tag.range)}`)
2389
- };
2390
- break;
2391
- case DiagnosticCode10.ParameterMutableRest:
2392
- content = {
2393
- value: codeblock(`\0(parameter) ..mut ${model.getValueInRange(tag.range)}`)
2394
- };
2395
- break;
2396
- case DiagnosticCode10.LocalFunction: {
2397
- const params = paramsList(model, def.fn);
2386
+ } else {
2398
2387
  content = {
2399
- value: codeblock(`\0fn ${model.getValueInRange(tag.range)}${params}`)
2388
+ value: codeblock(`\0${hover(text, model, def)}`)
2400
2389
  };
2401
- break;
2402
2390
  }
2403
- case DiagnosticCode10.LocalModule:
2404
- content = {
2405
- value: codeblock(`\0mod ${model.getValueInRange(tag.range)}`)
2406
- };
2407
- break;
2408
- case DiagnosticCode10.LocalImmutable:
2409
- content = {
2410
- value: codeblock(`\0let ${model.getValueInRange(tag.range)}`)
2411
- };
2412
- break;
2413
- case DiagnosticCode10.LocalConst:
2414
- content = {
2415
- value: codeblock(`\0const ${model.getValueInRange(tag.range)}`)
2416
- };
2417
- break;
2418
- case DiagnosticCode10.LocalMutable:
2419
- content = {
2420
- value: codeblock(`\0let mut ${model.getValueInRange(tag.range)}`)
2421
- };
2422
- break;
2423
2391
  }
2424
2392
  if (ref == null) {
2425
2393
  range = tag.range;
@@ -2531,6 +2499,89 @@ var HoverProvider = class extends Provider {
2531
2499
 
2532
2500
  // src/lsp/providers/inlay-hints-provider.ts
2533
2501
  import { DiagnosticCode as DiagnosticCode11 } from "@mirascript/constants";
2502
+ function provideInlayHint(tag, model) {
2503
+ let lineNumber = 0;
2504
+ let column = 0;
2505
+ let label = "";
2506
+ const kind = languages.InlayHintKind.Parameter;
2507
+ let paddingLeft = true;
2508
+ let paddingRight = false;
2509
+ const edits = [];
2510
+ switch (tag.code) {
2511
+ case DiagnosticCode11.ParameterIt: {
2512
+ if (!tag.references.length) {
2513
+ return null;
2514
+ }
2515
+ lineNumber = tag.range.endLineNumber;
2516
+ column = tag.range.endColumn;
2517
+ label = "(it)";
2518
+ paddingLeft = /\bfn$/u.test(model.getValueInRange(new Range(lineNumber, column - 3, lineNumber, column)));
2519
+ paddingRight = model.getValueInRange(new Range(lineNumber, column, lineNumber, column + 1)) === "{";
2520
+ edits.push({
2521
+ range: new Range(lineNumber, column, lineNumber, column),
2522
+ text: `${paddingLeft ? " " : ""}${label}${paddingRight ? " " : ""}`
2523
+ });
2524
+ break;
2525
+ }
2526
+ case DiagnosticCode11.UnnamedRecordField0:
2527
+ case DiagnosticCode11.UnnamedRecordField1:
2528
+ case DiagnosticCode11.UnnamedRecordField2:
2529
+ case DiagnosticCode11.UnnamedRecordField3:
2530
+ case DiagnosticCode11.UnnamedRecordField4:
2531
+ case DiagnosticCode11.UnnamedRecordField5:
2532
+ case DiagnosticCode11.UnnamedRecordField6:
2533
+ case DiagnosticCode11.UnnamedRecordField7:
2534
+ case DiagnosticCode11.UnnamedRecordField8:
2535
+ case DiagnosticCode11.UnnamedRecordField9:
2536
+ case DiagnosticCode11.UnnamedRecordFieldN: {
2537
+ const index = tag.code - DiagnosticCode11.UnnamedRecordField0;
2538
+ if (index > 9) break;
2539
+ lineNumber = tag.range.startLineNumber;
2540
+ column = tag.range.startColumn;
2541
+ label = `${index}:`;
2542
+ paddingLeft = /[^\s(]/u.test(model.getValueInRange(new Range(lineNumber, column - 1, lineNumber, column)));
2543
+ paddingRight = true;
2544
+ break;
2545
+ }
2546
+ case DiagnosticCode11.OmitNamedRecordField: {
2547
+ const ref = tag.references[0];
2548
+ if (ref?.code !== DiagnosticCode11.OmitNamedRecordFieldName) {
2549
+ return null;
2550
+ }
2551
+ lineNumber = tag.range.startLineNumber;
2552
+ column = tag.range.startColumn;
2553
+ label = model.getValueInRange(ref.range);
2554
+ paddingLeft = /[^\s(]/u.test(model.getValueInRange(new Range(lineNumber, column - 1, lineNumber, column)));
2555
+ paddingRight = false;
2556
+ const insertRight = !/\s/u.test(
2557
+ model.getValueInRange(
2558
+ new Range(
2559
+ tag.range.endLineNumber,
2560
+ tag.range.endColumn,
2561
+ tag.range.endLineNumber,
2562
+ tag.range.endColumn + 1
2563
+ )
2564
+ )
2565
+ );
2566
+ edits.push({
2567
+ range: tag.range,
2568
+ text: `${paddingLeft ? " " : ""}${label}${model.getValueInRange(tag.range)}${insertRight ? " " : ""}`
2569
+ });
2570
+ break;
2571
+ }
2572
+ }
2573
+ if (!label) {
2574
+ return null;
2575
+ }
2576
+ return {
2577
+ position: { lineNumber, column },
2578
+ label,
2579
+ kind,
2580
+ paddingLeft,
2581
+ paddingRight,
2582
+ textEdits: edits
2583
+ };
2584
+ }
2534
2585
  var InlayHintsProvider = class extends Provider {
2535
2586
  /** @inheritdoc */
2536
2587
  get onDidChangeInlayHints() {
@@ -2547,95 +2598,14 @@ var InlayHintsProvider = class extends Provider {
2547
2598
  if (!range.containsRange(tag.range)) {
2548
2599
  continue;
2549
2600
  }
2550
- let lineNumber = 0;
2551
- let column = 0;
2552
- let label = "";
2553
- const kind = languages.InlayHintKind.Parameter;
2554
- let paddingLeft = true;
2555
- let paddingRight = false;
2556
- const edits = [];
2557
- switch (tag.code) {
2558
- case DiagnosticCode11.ParameterIt: {
2559
- if (!tag.references.length) {
2560
- continue;
2561
- }
2562
- lineNumber = tag.range.endLineNumber;
2563
- column = tag.range.endColumn;
2564
- label = "(it)";
2565
- paddingLeft = /\bfn$/u.test(
2566
- model.getValueInRange(new Range(lineNumber, column - 3, lineNumber, column))
2567
- );
2568
- paddingRight = model.getValueInRange(new Range(lineNumber, column, lineNumber, column + 1)) === "{";
2569
- edits.push({
2570
- range: new Range(lineNumber, column, lineNumber, column),
2571
- text: `${paddingLeft ? " " : ""}${label}${paddingRight ? " " : ""}`
2572
- });
2573
- break;
2574
- }
2575
- case DiagnosticCode11.UnnamedRecordField0:
2576
- case DiagnosticCode11.UnnamedRecordField1:
2577
- case DiagnosticCode11.UnnamedRecordField2:
2578
- case DiagnosticCode11.UnnamedRecordField3:
2579
- case DiagnosticCode11.UnnamedRecordField4:
2580
- case DiagnosticCode11.UnnamedRecordField5:
2581
- case DiagnosticCode11.UnnamedRecordField6:
2582
- case DiagnosticCode11.UnnamedRecordField7:
2583
- case DiagnosticCode11.UnnamedRecordField8:
2584
- case DiagnosticCode11.UnnamedRecordField9:
2585
- case DiagnosticCode11.UnnamedRecordFieldN: {
2586
- const index = tag.code - DiagnosticCode11.UnnamedRecordField0;
2587
- if (index > 9) break;
2588
- lineNumber = tag.range.startLineNumber;
2589
- column = tag.range.startColumn;
2590
- label = `${index}:`;
2591
- paddingLeft = /[^\s(]/u.test(
2592
- model.getValueInRange(new Range(lineNumber, column - 1, lineNumber, column))
2593
- );
2594
- paddingRight = true;
2595
- break;
2596
- }
2597
- case DiagnosticCode11.OmitNamedRecordField: {
2598
- const ref = tag.references[0];
2599
- if (ref?.code !== DiagnosticCode11.OmitNamedRecordFieldName) continue;
2600
- lineNumber = tag.range.startLineNumber;
2601
- column = tag.range.startColumn;
2602
- label = model.getValueInRange(ref.range);
2603
- paddingLeft = /[^\s(]/u.test(
2604
- model.getValueInRange(new Range(lineNumber, column - 1, lineNumber, column))
2605
- );
2606
- paddingRight = false;
2607
- const insertRight = !/\s/u.test(
2608
- model.getValueInRange(
2609
- new Range(
2610
- tag.range.endLineNumber,
2611
- tag.range.endColumn,
2612
- tag.range.endLineNumber,
2613
- tag.range.endColumn + 1
2614
- )
2615
- )
2616
- );
2617
- edits.push({
2618
- range: tag.range,
2619
- text: `${paddingLeft ? " " : ""}${label}${model.getValueInRange(tag.range)}${insertRight ? " " : ""}`
2620
- });
2621
- break;
2622
- }
2601
+ const hint = provideInlayHint(tag, model);
2602
+ if (hint) {
2603
+ hints.push(hint);
2623
2604
  }
2624
- if (!label) continue;
2625
- const hint = {
2626
- position: { lineNumber, column },
2627
- label,
2628
- kind,
2629
- paddingLeft,
2630
- paddingRight,
2631
- textEdits: edits
2632
- };
2633
- hints.push(hint);
2634
2605
  }
2635
2606
  return {
2636
2607
  hints,
2637
- dispose: () => {
2638
- }
2608
+ dispose: () => void 0
2639
2609
  };
2640
2610
  }
2641
2611
  };