@aster-cloud/aster-lang-ts 1.0.36 → 1.1.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/CHANGELOG.md +28 -0
- package/README.md +13 -7
- package/dist/scripts/aster.js +10 -5
- package/dist/scripts/aster.js.map +1 -1
- package/dist/scripts/core-ir-json.js +8 -3
- package/dist/scripts/core-ir-json.js.map +1 -1
- package/dist/scripts/emit-classfiles.js +3 -2
- package/dist/scripts/emit-classfiles.js.map +1 -1
- package/dist/scripts/emit-core.js +8 -5
- package/dist/scripts/emit-core.js.map +1 -1
- package/dist/scripts/generate-casefold.d.ts +2 -0
- package/dist/scripts/generate-casefold.d.ts.map +1 -0
- package/dist/scripts/generate-casefold.js +34 -0
- package/dist/scripts/generate-casefold.js.map +1 -0
- package/dist/scripts/generate-lexicons.js +17 -1
- package/dist/scripts/generate-lexicons.js.map +1 -1
- package/dist/scripts/golden.js +16 -16
- package/dist/scripts/golden.js.map +1 -1
- package/dist/scripts/perf-benchmark.js +1 -0
- package/dist/scripts/perf-benchmark.js.map +1 -1
- package/dist/scripts/profile-medium-project.js +1 -1
- package/dist/scripts/profile-medium-project.js.map +1 -1
- package/dist/scripts/repl.js +3 -8
- package/dist/scripts/repl.js.map +1 -1
- package/dist/scripts/typecheck-cli.js +10 -9
- package/dist/scripts/typecheck-cli.js.map +1 -1
- package/dist/scripts/update-eff-violation-expected.js +6 -6
- package/dist/scripts/update-eff-violation-expected.js.map +1 -1
- package/dist/scripts/verify-capabilities.js +3 -6
- package/dist/scripts/verify-capabilities.js.map +1 -1
- package/dist/scripts/verify-lexicon-sync.js +10 -0
- package/dist/scripts/verify-lexicon-sync.js.map +1 -1
- package/dist/src/ai/validator.d.ts +1 -1
- package/dist/src/ai/validator.d.ts.map +1 -1
- package/dist/src/ai/validator.js +12 -12
- package/dist/src/ai/validator.js.map +1 -1
- package/dist/src/ast/ast.d.ts +1 -0
- package/dist/src/ast/ast.d.ts.map +1 -1
- package/dist/src/ast/ast.js.map +1 -1
- package/dist/src/browser.d.ts +27 -10
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +42 -54
- package/dist/src/browser.js.map +1 -1
- package/dist/src/cli/policy-converter.js +5 -9
- package/dist/src/cli/policy-converter.js.map +1 -1
- package/dist/src/compile-pipeline.d.ts +48 -0
- package/dist/src/compile-pipeline.d.ts.map +1 -0
- package/dist/src/compile-pipeline.js +89 -0
- package/dist/src/compile-pipeline.js.map +1 -0
- package/dist/src/config/lexicons/diagnostic-messages.d.ts.map +1 -1
- package/dist/src/config/lexicons/diagnostic-messages.js +20 -0
- package/dist/src/config/lexicons/diagnostic-messages.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/casefold-table.generated.d.ts +9 -0
- package/dist/src/config/lexicons/identifiers/casefold-table.generated.d.ts.map +1 -0
- package/dist/src/config/lexicons/identifiers/casefold-table.generated.js +1467 -0
- package/dist/src/config/lexicons/identifiers/casefold-table.generated.js.map +1 -0
- package/dist/src/config/lexicons/identifiers/casefold.d.ts +7 -0
- package/dist/src/config/lexicons/identifiers/casefold.d.ts.map +1 -0
- package/dist/src/config/lexicons/identifiers/casefold.js +37 -0
- package/dist/src/config/lexicons/identifiers/casefold.js.map +1 -0
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.de-DE.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.de-DE.js +8 -0
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.de-DE.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.en-US.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.en-US.js +8 -0
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.en-US.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.zh-CN.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.zh-CN.js +8 -0
- package/dist/src/config/lexicons/identifiers/domains/finance.loan.zh-CN.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.de-DE.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.de-DE.js +6 -0
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.de-DE.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.en-US.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.en-US.js +6 -0
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.en-US.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.zh-CN.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.zh-CN.js +6 -0
- package/dist/src/config/lexicons/identifiers/domains/insurance.auto.zh-CN.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/index.d.ts +7 -9
- package/dist/src/config/lexicons/identifiers/index.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/index.js +8 -9
- package/dist/src/config/lexicons/identifiers/index.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/registry.d.ts +11 -5
- package/dist/src/config/lexicons/identifiers/registry.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/registry.js +20 -14
- package/dist/src/config/lexicons/identifiers/registry.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/scopes.d.ts +52 -0
- package/dist/src/config/lexicons/identifiers/scopes.d.ts.map +1 -0
- package/dist/src/config/lexicons/identifiers/scopes.js +166 -0
- package/dist/src/config/lexicons/identifiers/scopes.js.map +1 -0
- package/dist/src/config/lexicons/identifiers/types.d.ts +15 -29
- package/dist/src/config/lexicons/identifiers/types.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/types.js +91 -101
- package/dist/src/config/lexicons/identifiers/types.js.map +1 -1
- package/dist/src/config/lexicons/lsp-ui-texts.d.ts +7 -0
- package/dist/src/config/lexicons/lsp-ui-texts.d.ts.map +1 -1
- package/dist/src/config/lexicons/lsp-ui-texts.js +12 -0
- package/dist/src/config/lexicons/lsp-ui-texts.js.map +1 -1
- package/dist/src/config/lexicons/zh-CN.d.ts.map +1 -1
- package/dist/src/config/lexicons/zh-CN.js +1 -0
- package/dist/src/config/lexicons/zh-CN.js.map +1 -1
- package/dist/src/config/semantic.d.ts +5 -0
- package/dist/src/config/semantic.d.ts.map +1 -1
- package/dist/src/config/semantic.js +12 -0
- package/dist/src/config/semantic.js.map +1 -1
- package/dist/src/core/inferred_fields.d.ts +10 -0
- package/dist/src/core/inferred_fields.d.ts.map +1 -1
- package/dist/src/core/inferred_fields.js +9 -0
- package/dist/src/core/inferred_fields.js.map +1 -1
- package/dist/src/core/interpreter.d.ts.map +1 -1
- package/dist/src/core/interpreter.js +37 -16
- package/dist/src/core/interpreter.js.map +1 -1
- package/dist/src/core/resolution-mark.d.ts +28 -0
- package/dist/src/core/resolution-mark.d.ts.map +1 -0
- package/dist/src/core/resolution-mark.js +19 -0
- package/dist/src/core/resolution-mark.js.map +1 -0
- package/dist/src/core/resolve-typed-references.d.ts +36 -0
- package/dist/src/core/resolve-typed-references.d.ts.map +1 -0
- package/dist/src/core/resolve-typed-references.js +703 -0
- package/dist/src/core/resolve-typed-references.js.map +1 -0
- package/dist/src/diagnostics/error_codes.d.ts +11 -1
- package/dist/src/diagnostics/error_codes.d.ts.map +1 -1
- package/dist/src/diagnostics/error_codes.js +80 -0
- package/dist/src/diagnostics/error_codes.js.map +1 -1
- package/dist/src/frontend/canonicalizer.d.ts +8 -13
- package/dist/src/frontend/canonicalizer.d.ts.map +1 -1
- package/dist/src/frontend/canonicalizer.js +21 -50
- package/dist/src/frontend/canonicalizer.js.map +1 -1
- package/dist/src/frontend/resolution-choice.d.ts +34 -0
- package/dist/src/frontend/resolution-choice.d.ts.map +1 -0
- package/dist/src/frontend/resolution-choice.js +69 -0
- package/dist/src/frontend/resolution-choice.js.map +1 -0
- package/dist/src/frontend/resolution-context.d.ts +28 -0
- package/dist/src/frontend/resolution-context.d.ts.map +1 -0
- package/dist/src/frontend/resolution-context.js +7 -0
- package/dist/src/frontend/resolution-context.js.map +1 -0
- package/dist/src/frontend/resolve-declarations.d.ts +13 -0
- package/dist/src/frontend/resolve-declarations.d.ts.map +1 -0
- package/dist/src/frontend/resolve-declarations.js +611 -0
- package/dist/src/frontend/resolve-declarations.js.map +1 -0
- package/dist/src/frontend/resolve-policy-types.d.ts +54 -0
- package/dist/src/frontend/resolve-policy-types.d.ts.map +1 -0
- package/dist/src/frontend/resolve-policy-types.js +71 -0
- package/dist/src/frontend/resolve-policy-types.js.map +1 -0
- package/dist/src/frontend/transformers.d.ts +11 -2
- package/dist/src/frontend/transformers.d.ts.map +1 -1
- package/dist/src/frontend/transformers.js +153 -10
- package/dist/src/frontend/transformers.js.map +1 -1
- package/dist/src/index.d.ts +14 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/lower_to_core.d.ts +2 -16
- package/dist/src/lower_to_core.d.ts.map +1 -1
- package/dist/src/lower_to_core.js +101 -44
- package/dist/src/lower_to_core.js.map +1 -1
- package/dist/src/lsp/canonicalize-options.d.ts +8 -11
- package/dist/src/lsp/canonicalize-options.d.ts.map +1 -1
- package/dist/src/lsp/canonicalize-options.js +8 -8
- package/dist/src/lsp/canonicalize-options.js.map +1 -1
- package/dist/src/lsp/completion.d.ts +32 -5
- package/dist/src/lsp/completion.d.ts.map +1 -1
- package/dist/src/lsp/completion.js +59 -0
- package/dist/src/lsp/completion.js.map +1 -1
- package/dist/src/lsp/diagnostics.d.ts +2 -0
- package/dist/src/lsp/diagnostics.d.ts.map +1 -1
- package/dist/src/lsp/diagnostics.js +77 -73
- package/dist/src/lsp/diagnostics.js.map +1 -1
- package/dist/src/lsp/navigation/hover.d.ts +12 -5
- package/dist/src/lsp/navigation/hover.d.ts.map +1 -1
- package/dist/src/lsp/navigation/hover.js +136 -90
- package/dist/src/lsp/navigation/hover.js.map +1 -1
- package/dist/src/lsp/parse-document.d.ts +3 -0
- package/dist/src/lsp/parse-document.d.ts.map +1 -1
- package/dist/src/lsp/parse-document.js +5 -17
- package/dist/src/lsp/parse-document.js.map +1 -1
- package/dist/src/lsp/resolution.d.ts +40 -0
- package/dist/src/lsp/resolution.d.ts.map +1 -0
- package/dist/src/lsp/resolution.js +179 -0
- package/dist/src/lsp/resolution.js.map +1 -0
- package/dist/src/lsp/server.js +3 -1
- package/dist/src/lsp/server.js.map +1 -1
- package/dist/src/lsp/source-positions.d.ts +3 -9
- package/dist/src/lsp/source-positions.d.ts.map +1 -1
- package/dist/src/lsp/source-positions.js +25 -19
- package/dist/src/lsp/source-positions.js.map +1 -1
- package/dist/src/mapping/candidate-generator.d.ts +19 -9
- package/dist/src/mapping/candidate-generator.d.ts.map +1 -1
- package/dist/src/mapping/candidate-generator.js +79 -40
- package/dist/src/mapping/candidate-generator.js.map +1 -1
- package/dist/src/mapping/pipeline.d.ts +6 -0
- package/dist/src/mapping/pipeline.d.ts.map +1 -1
- package/dist/src/mapping/pipeline.js +69 -75
- package/dist/src/mapping/pipeline.js.map +1 -1
- package/dist/src/mapping/review-queue.d.ts.map +1 -1
- package/dist/src/mapping/review-queue.js +3 -2
- package/dist/src/mapping/review-queue.js.map +1 -1
- package/dist/src/nodeid/node-id-map.d.ts +7 -0
- package/dist/src/nodeid/node-id-map.d.ts.map +1 -1
- package/dist/src/nodeid/node-id-map.js +23 -13
- package/dist/src/nodeid/node-id-map.js.map +1 -1
- package/dist/src/parser/context.d.ts +2 -0
- package/dist/src/parser/context.d.ts.map +1 -1
- package/dist/src/parser/context.js +1 -0
- package/dist/src/parser/context.js.map +1 -1
- package/dist/src/parser/decl-parser.d.ts.map +1 -1
- package/dist/src/parser/decl-parser.js +1 -0
- package/dist/src/parser/decl-parser.js.map +1 -1
- package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
- package/dist/src/parser/expr-stmt-parser.js +2 -16
- package/dist/src/parser/expr-stmt-parser.js.map +1 -1
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/parser.js +3 -1
- package/dist/src/parser.js.map +1 -1
- package/dist/src/typecheck/expression.d.ts.map +1 -1
- package/dist/src/typecheck/expression.js +35 -1
- package/dist/src/typecheck/expression.js.map +1 -1
- package/dist/src/typecheck/generics.d.ts +5 -0
- package/dist/src/typecheck/generics.d.ts.map +1 -1
- package/dist/src/typecheck/generics.js +15 -8
- package/dist/src/typecheck/generics.js.map +1 -1
- package/dist/src/typecheck/statement.d.ts +10 -0
- package/dist/src/typecheck/statement.d.ts.map +1 -1
- package/dist/src/typecheck/statement.js +19 -5
- package/dist/src/typecheck/statement.js.map +1 -1
- package/dist/src/types.d.ts +45 -13
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/version.d.ts +17 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +17 -0
- package/dist/src/version.js.map +1 -0
- package/dist/test/integration/builtin-enum-vocabulary.test.d.ts +2 -0
- package/dist/test/integration/builtin-enum-vocabulary.test.d.ts.map +1 -0
- package/dist/test/integration/builtin-enum-vocabulary.test.js +51 -0
- package/dist/test/integration/builtin-enum-vocabulary.test.js.map +1 -0
- package/dist/test/integration/compliance/compliance-smoke.test.js +16 -9
- package/dist/test/integration/compliance/compliance-smoke.test.js.map +1 -1
- package/dist/test/integration/lsp/lsp-rename-safety.test.js +0 -13
- package/dist/test/integration/lsp/lsp-rename-safety.test.js.map +1 -1
- package/dist/test/integration/name-resolution-entrypoints.test.d.ts +2 -0
- package/dist/test/integration/name-resolution-entrypoints.test.d.ts.map +1 -0
- package/dist/test/integration/name-resolution-entrypoints.test.js +109 -0
- package/dist/test/integration/name-resolution-entrypoints.test.js.map +1 -0
- package/dist/test/integration/vocabulary-resolution.test.d.ts +2 -0
- package/dist/test/integration/vocabulary-resolution.test.d.ts.map +1 -0
- package/dist/test/integration/vocabulary-resolution.test.js +291 -0
- package/dist/test/integration/vocabulary-resolution.test.js.map +1 -0
- package/dist/test/property/property.test.js +2 -1
- package/dist/test/property/property.test.js.map +1 -1
- package/dist/test/unit/allocation-budget.test.js +41 -0
- package/dist/test/unit/allocation-budget.test.js.map +1 -1
- package/dist/test/unit/canonicalizer/canonicalizer.test.js +7 -79
- package/dist/test/unit/canonicalizer/canonicalizer.test.js.map +1 -1
- package/dist/test/unit/canonicalizer/chinese-function-syntax.test.d.ts +2 -0
- package/dist/test/unit/canonicalizer/chinese-function-syntax.test.d.ts.map +1 -0
- package/dist/test/unit/canonicalizer/chinese-function-syntax.test.js +86 -0
- package/dist/test/unit/canonicalizer/chinese-function-syntax.test.js.map +1 -0
- package/dist/test/unit/canonicalizer/transformers.test.d.ts +2 -0
- package/dist/test/unit/canonicalizer/transformers.test.d.ts.map +1 -0
- package/dist/test/unit/canonicalizer/transformers.test.js +25 -0
- package/dist/test/unit/canonicalizer/transformers.test.js.map +1 -0
- package/dist/test/unit/config/lexicons/identifiers/identifier-mapping.test.js +134 -31
- package/dist/test/unit/config/lexicons/identifiers/identifier-mapping.test.js.map +1 -1
- package/dist/test/unit/config/lexicons/identifiers/literal-macro.test.js +16 -18
- package/dist/test/unit/config/lexicons/identifiers/literal-macro.test.js.map +1 -1
- package/dist/test/unit/core/resolve-typed-references.test.d.ts +2 -0
- package/dist/test/unit/core/resolve-typed-references.test.d.ts.map +1 -0
- package/dist/test/unit/core/resolve-typed-references.test.js +600 -0
- package/dist/test/unit/core/resolve-typed-references.test.js.map +1 -0
- package/dist/test/unit/diagnostics/resolution-codes.test.d.ts +6 -0
- package/dist/test/unit/diagnostics/resolution-codes.test.d.ts.map +1 -0
- package/dist/test/unit/diagnostics/resolution-codes.test.js +83 -0
- package/dist/test/unit/diagnostics/resolution-codes.test.js.map +1 -0
- package/dist/test/unit/formatter-corpus-roundtrip.test.js +9 -0
- package/dist/test/unit/formatter-corpus-roundtrip.test.js.map +1 -1
- package/dist/test/unit/frontend/resolve-declarations.test.d.ts +2 -0
- package/dist/test/unit/frontend/resolve-declarations.test.d.ts.map +1 -0
- package/dist/test/unit/frontend/resolve-declarations.test.js +400 -0
- package/dist/test/unit/frontend/resolve-declarations.test.js.map +1 -0
- package/dist/test/unit/identifiers/casefold.test.d.ts +2 -0
- package/dist/test/unit/identifiers/casefold.test.d.ts.map +1 -0
- package/dist/test/unit/identifiers/casefold.test.js +77 -0
- package/dist/test/unit/identifiers/casefold.test.js.map +1 -0
- package/dist/test/unit/identifiers/scopes.test.d.ts +2 -0
- package/dist/test/unit/identifiers/scopes.test.d.ts.map +1 -0
- package/dist/test/unit/identifiers/scopes.test.js +109 -0
- package/dist/test/unit/identifiers/scopes.test.js.map +1 -0
- package/dist/test/unit/lambda-capture-parity.test.js +12 -5
- package/dist/test/unit/lambda-capture-parity.test.js.map +1 -1
- package/dist/test/unit/lsp/lsp-locale-fixes.test.js +10 -11
- package/dist/test/unit/lsp/lsp-locale-fixes.test.js.map +1 -1
- package/dist/test/unit/lsp/parse-document.test.js +39 -0
- package/dist/test/unit/lsp/parse-document.test.js.map +1 -1
- package/dist/test/unit/lsp/resolution-completion.test.d.ts +2 -0
- package/dist/test/unit/lsp/resolution-completion.test.d.ts.map +1 -0
- package/dist/test/unit/lsp/resolution-completion.test.js +79 -0
- package/dist/test/unit/lsp/resolution-completion.test.js.map +1 -0
- package/dist/test/unit/lsp/resolution-diagnostics.test.d.ts +2 -0
- package/dist/test/unit/lsp/resolution-diagnostics.test.d.ts.map +1 -0
- package/dist/test/unit/lsp/resolution-diagnostics.test.js +88 -0
- package/dist/test/unit/lsp/resolution-diagnostics.test.js.map +1 -0
- package/dist/test/unit/lsp/resolution-fixture.d.ts +32 -0
- package/dist/test/unit/lsp/resolution-fixture.d.ts.map +1 -0
- package/dist/test/unit/lsp/resolution-fixture.js +69 -0
- package/dist/test/unit/lsp/resolution-fixture.js.map +1 -0
- package/dist/test/unit/lsp/resolution-hover.test.d.ts +2 -0
- package/dist/test/unit/lsp/resolution-hover.test.d.ts.map +1 -0
- package/dist/test/unit/lsp/resolution-hover.test.js +107 -0
- package/dist/test/unit/lsp/resolution-hover.test.js.map +1 -0
- package/dist/test/unit/lsp/tenant-vocabulary.test.js +21 -47
- package/dist/test/unit/lsp/tenant-vocabulary.test.js.map +1 -1
- package/dist/test/unit/mapping/candidate-generator.test.js +54 -1
- package/dist/test/unit/mapping/candidate-generator.test.js.map +1 -1
- package/dist/test/unit/mapping/pipeline.test.js +22 -1
- package/dist/test/unit/mapping/pipeline.test.js.map +1 -1
- package/dist/test/unit/parser/parser.test.js +22 -0
- package/dist/test/unit/parser/parser.test.js.map +1 -1
- package/dist/test/unit/public-api-checked-entries.test.d.ts +2 -0
- package/dist/test/unit/public-api-checked-entries.test.d.ts.map +1 -0
- package/dist/test/unit/public-api-checked-entries.test.js +28 -0
- package/dist/test/unit/public-api-checked-entries.test.js.map +1 -0
- package/dist/test/unit/typecheck/e104-block-scope-parity.test.d.ts +2 -0
- package/dist/test/unit/typecheck/e104-block-scope-parity.test.d.ts.map +1 -0
- package/dist/test/unit/typecheck/e104-block-scope-parity.test.js +82 -0
- package/dist/test/unit/typecheck/e104-block-scope-parity.test.js.map +1 -0
- package/dist/test/unit/typecheck/qualified-enum-member.test.d.ts +2 -0
- package/dist/test/unit/typecheck/qualified-enum-member.test.d.ts.map +1 -0
- package/dist/test/unit/typecheck/qualified-enum-member.test.js +73 -0
- package/dist/test/unit/typecheck/qualified-enum-member.test.js.map +1 -0
- package/dist/test/unit/typecheck/type-inference.test.js +22 -0
- package/dist/test/unit/typecheck/type-inference.test.js.map +1 -1
- package/dist/test/unit/version.test.d.ts +9 -0
- package/dist/test/unit/version.test.d.ts.map +1 -0
- package/dist/test/unit/version.test.js +34 -0
- package/dist/test/unit/version.test.js.map +1 -0
- package/package.json +1 -1
- package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.d.ts +0 -47
- package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.d.ts.map +0 -1
- package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.js +0 -142
- package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 名称解析悬停 / 补全测试的共用夹具(ADR 0051):带租户词汇的文档快照与 stub connection。
|
|
3
|
+
*
|
|
4
|
+
* 走真实的 parseDocumentText 与 register*Handlers 接线,只把词汇作用域直接塞进快照
|
|
5
|
+
* (等价于 server 的 CachedDoc),避免依赖租户注册中心的全局状态。
|
|
6
|
+
*/
|
|
7
|
+
import { TextDocument } from 'vscode-languageserver-textdocument';
|
|
8
|
+
import { parseDocumentText } from '../../../src/lsp/parse-document.js';
|
|
9
|
+
import { buildVocabularyScopes } from '../../../src/config/lexicons/identifiers/scopes.js';
|
|
10
|
+
import { IdentifierKind } from '../../../src/config/lexicons/identifiers/types.js';
|
|
11
|
+
const struct = (canonical, localized) => ({ canonical, localized, kind: IdentifierKind.STRUCT });
|
|
12
|
+
const field = (parent, canonical, localized) => ({
|
|
13
|
+
canonical, localized, kind: IdentifierKind.FIELD, parent,
|
|
14
|
+
});
|
|
15
|
+
const member = (parent, canonical, localized) => ({
|
|
16
|
+
canonical, localized, kind: IdentifierKind.ENUM_VALUE, parent,
|
|
17
|
+
});
|
|
18
|
+
/** Driver(司机)字段 age → alter、name 无本地化;Owner(车主)字段 years → jahre、driver → fahrer;Level 成员 Hoch / Niedrig。 */
|
|
19
|
+
export const VOCAB = buildVocabularyScopes({
|
|
20
|
+
id: 'lsp-resolution', name: 't', locale: 'zh-CN', version: '1',
|
|
21
|
+
structs: [struct('Driver', '司机'), struct('Owner', '车主'), struct('Level', '等级')],
|
|
22
|
+
fields: [field('Driver', 'age', 'alter'), field('Owner', 'years', 'jahre'), field('Owner', 'driver', 'fahrer')],
|
|
23
|
+
functions: [{ canonical: 'check', localized: '检查', kind: IdentifierKind.FUNCTION }],
|
|
24
|
+
enumValues: [member('Level', 'High', 'Hoch'), member('Level', 'Low', 'Niedrig')],
|
|
25
|
+
});
|
|
26
|
+
export const DECLS = [
|
|
27
|
+
'模块 m。',
|
|
28
|
+
'',
|
|
29
|
+
'定义 司机 包含 alter 作为 整数,name 作为 文本。',
|
|
30
|
+
'',
|
|
31
|
+
'定义 车主 包含 jahre 作为 整数,fahrer 作为 司机。',
|
|
32
|
+
'',
|
|
33
|
+
'定义 等级 为以下之一 Hoch、Niedrig。',
|
|
34
|
+
'',
|
|
35
|
+
];
|
|
36
|
+
let seq = 0;
|
|
37
|
+
export function docOf(lines) {
|
|
38
|
+
const uri = `file:///resolution-${seq++}.aster`;
|
|
39
|
+
return { uri, document: TextDocument.create(uri, 'aster', 1, lines.join('\n')), lines };
|
|
40
|
+
}
|
|
41
|
+
/** 等价 server 的 getOrParse:解析文档并附上租户词汇作用域。 */
|
|
42
|
+
export function getOrParseWith(lexicon, vocabulary = VOCAB) {
|
|
43
|
+
const entries = new Map();
|
|
44
|
+
return (doc) => {
|
|
45
|
+
const key = `${doc.uri}@${doc.version}`;
|
|
46
|
+
if (!entries.has(key)) {
|
|
47
|
+
const parsed = parseDocumentText(doc.getText(), lexicon, undefined, undefined);
|
|
48
|
+
entries.set(key, { ...parsed, text: doc.getText(), vocabulary });
|
|
49
|
+
}
|
|
50
|
+
return entries.get(key);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** 第 line 行(0 基)中第 nth 个 needle 的起始列 + offset。 */
|
|
54
|
+
export function posOf(doc, line, needle, offset = 0, nth = 0) {
|
|
55
|
+
let from = 0;
|
|
56
|
+
let at = -1;
|
|
57
|
+
for (let i = 0; i <= nth; i++) {
|
|
58
|
+
at = doc.lines[line].indexOf(needle, from);
|
|
59
|
+
from = at + 1;
|
|
60
|
+
}
|
|
61
|
+
if (at < 0)
|
|
62
|
+
throw new Error(`第 ${line} 行找不到 ${needle}`);
|
|
63
|
+
return { line, character: at + offset };
|
|
64
|
+
}
|
|
65
|
+
export function documentsOf(...docs) {
|
|
66
|
+
const byUri = new Map(docs.map((d) => [d.uri, d.document]));
|
|
67
|
+
return { get: (uri) => byUri.get(uri) };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=resolution-fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution-fixture.js","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-fixture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution-hover.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-hover.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 按位置角色的悬停(ADR 0051 §5「LSP」与 Review Focus 1)。
|
|
3
|
+
*
|
|
4
|
+
* 悬停在本地化写法上显示 `写法 → 规范名(角色 · 父名)`,角色与父名来自 R1 的 resolved 与
|
|
5
|
+
* R2 的解析结果;写法等于规范名时不追加任何内容。语法不完整时只用 R1 结果,R2 跳过,不抛异常。
|
|
6
|
+
* 走真实的 registerHoverHandler 接线(stub connection 捕获回调)。
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it } from 'node:test';
|
|
9
|
+
import assert from 'node:assert/strict';
|
|
10
|
+
import { registerHoverHandler } from '../../../src/lsp/navigation/hover.js';
|
|
11
|
+
import { resolveDocument } from '../../../src/lsp/resolution.js';
|
|
12
|
+
import { ZH_CN } from '../../../src/config/lexicons/zh-CN.js';
|
|
13
|
+
import { DE_DE } from '../../../src/config/lexicons/de-DE.js';
|
|
14
|
+
import { DECLS, docOf, documentsOf, getOrParseWith, posOf } from './resolution-fixture.js';
|
|
15
|
+
function hoverAt(doc, pos, lexicon = ZH_CN) {
|
|
16
|
+
let handler;
|
|
17
|
+
const connection = { onHover: (fn) => { handler = fn; } };
|
|
18
|
+
registerHoverHandler(connection, documentsOf(doc), getOrParseWith(lexicon), () => lexicon);
|
|
19
|
+
assert.ok(handler, 'onHover 未注册');
|
|
20
|
+
return handler({ textDocument: { uri: doc.uri }, position: pos }).then((h) => h?.contents.value ?? null);
|
|
21
|
+
}
|
|
22
|
+
const PROGRAM = docOf([
|
|
23
|
+
...DECLS,
|
|
24
|
+
'规则 检查 给定 x 作为 司机,产出 整数:',
|
|
25
|
+
' 返回 x.alter。',
|
|
26
|
+
'',
|
|
27
|
+
'规则 级别 给定 x 作为 司机,产出 等级:',
|
|
28
|
+
' 返回 Hoch。',
|
|
29
|
+
'',
|
|
30
|
+
'规则 g 给定 h 作为 车主,产出 整数:',
|
|
31
|
+
' 返回 h.fahrer.alter。',
|
|
32
|
+
'',
|
|
33
|
+
]);
|
|
34
|
+
describe('按角色悬停', () => {
|
|
35
|
+
it('★字段声明 alter:alter → age(字段 · Driver)', async () => {
|
|
36
|
+
const text = await hoverAt(PROGRAM, posOf(PROGRAM, 2, 'alter', 1));
|
|
37
|
+
assert.ok(text?.includes('alter → age(字段 · Driver)'), `实际:${text}`);
|
|
38
|
+
});
|
|
39
|
+
it('★点分路径 x.alter 的字段段(R2):alter → age(字段 · Driver)', async () => {
|
|
40
|
+
const text = await hoverAt(PROGRAM, posOf(PROGRAM, 9, 'alter', 2));
|
|
41
|
+
assert.ok(text?.includes('alter → age(字段 · Driver)'), `实际:${text}`);
|
|
42
|
+
});
|
|
43
|
+
it('★多段路径 h.fahrer.alter:各段按前一段的类型取父名', async () => {
|
|
44
|
+
const fahrer = await hoverAt(PROGRAM, posOf(PROGRAM, 15, 'fahrer', 1));
|
|
45
|
+
const alter = await hoverAt(PROGRAM, posOf(PROGRAM, 15, 'alter', 1));
|
|
46
|
+
assert.ok(fahrer?.includes('fahrer → driver(字段 · Owner)'), `实际:${fahrer}`);
|
|
47
|
+
assert.ok(alter?.includes('alter → age(字段 · Driver)'), `实际:${alter}`);
|
|
48
|
+
});
|
|
49
|
+
it('★枚举成员:声明与期望枚举下的裸名都显示 Hoch → High(枚举成员 · Level)', async () => {
|
|
50
|
+
const decl = await hoverAt(PROGRAM, posOf(PROGRAM, 6, 'Hoch', 1));
|
|
51
|
+
const ref = await hoverAt(PROGRAM, posOf(PROGRAM, 12, 'Hoch', 1));
|
|
52
|
+
assert.ok(decl?.includes('Hoch → High(枚举成员 · Level)'), `实际:${decl}`);
|
|
53
|
+
assert.ok(ref?.includes('Hoch → High(枚举成员 · Level)'), `实际:${ref}`);
|
|
54
|
+
});
|
|
55
|
+
it('类型与函数:司机 → Driver(类型)、检查 → check(函数)', async () => {
|
|
56
|
+
const type = await hoverAt(PROGRAM, posOf(PROGRAM, 8, '司机', 1));
|
|
57
|
+
const func = await hoverAt(PROGRAM, posOf(PROGRAM, 8, '检查', 1));
|
|
58
|
+
assert.ok(type?.includes('司机 → Driver(类型)'), `实际:${type}`);
|
|
59
|
+
assert.ok(func?.includes('检查 → check(函数)'), `实际:${func}`);
|
|
60
|
+
});
|
|
61
|
+
it('★写法等于规范名时不追加解析行,原有悬停保持不变', async () => {
|
|
62
|
+
const param = await hoverAt(PROGRAM, posOf(PROGRAM, 8, 'x', 0));
|
|
63
|
+
const name = await hoverAt(PROGRAM, posOf(PROGRAM, 2, 'name', 1));
|
|
64
|
+
assert.ok(param && !param.includes('→'), `实际:${param}`);
|
|
65
|
+
assert.ok(param.startsWith('参数'), `原有参数悬停丢失:${param}`);
|
|
66
|
+
assert.ok(name && !name.includes('→'), `实际:${name}`);
|
|
67
|
+
});
|
|
68
|
+
it('文案随文档 lexicon 本地化:英文界面为 alter → age (field · Driver)', async () => {
|
|
69
|
+
const doc = docOf(['Modul m.', '', 'Definiere Driver hat alter als Ganzzahl.', '']);
|
|
70
|
+
const text = await hoverAt(doc, posOf(doc, 2, 'alter', 1), DE_DE);
|
|
71
|
+
assert.ok(text?.includes('alter → age (field · Driver)'), `实际:${text}`);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('语法不完整时的降级(Review Focus 1)', () => {
|
|
75
|
+
const BROKEN = docOf([
|
|
76
|
+
...DECLS,
|
|
77
|
+
'规则 检查 给定 x 作为 司机,产出 整数:',
|
|
78
|
+
' 返回 x.alter。',
|
|
79
|
+
'',
|
|
80
|
+
'规则 坏 给定 h 作为 车主,产出 整数:',
|
|
81
|
+
' 返回 h.fahrer.al',
|
|
82
|
+
'',
|
|
83
|
+
]);
|
|
84
|
+
it('★R2 跳过,仍保留 R1 可得的解析位置', () => {
|
|
85
|
+
const parsed = getOrParseWith(ZH_CN)(BROKEN.document);
|
|
86
|
+
assert.ok(parsed.parseDiagnostics.some((d) => d.severity === 'error'), '夹具应含语法错误');
|
|
87
|
+
const res = resolveDocument(parsed);
|
|
88
|
+
assert.equal(res.complete, false);
|
|
89
|
+
assert.equal(res.core, undefined, '语法不完整时不应运行 lower/R2');
|
|
90
|
+
assert.ok(res.sites.some((s) => s.role === 'FIELD_DECL' && s.canonical === 'age'), 'R1 的字段声明位置应保留');
|
|
91
|
+
});
|
|
92
|
+
it('★R1 位置照常悬停;R2 位置不悬停解析行;均不抛异常', async () => {
|
|
93
|
+
const decl = await hoverAt(BROKEN, posOf(BROKEN, 2, 'alter', 1));
|
|
94
|
+
assert.ok(decl?.includes('alter → age(字段 · Driver)'), `实际:${decl}`);
|
|
95
|
+
const path = await hoverAt(BROKEN, posOf(BROKEN, 9, 'alter', 2));
|
|
96
|
+
assert.ok(!path?.includes('→'), `R2 已跳过,不应有字段段解析行:${path}`);
|
|
97
|
+
await hoverAt(BROKEN, posOf(BROKEN, 12, 'al', 1));
|
|
98
|
+
});
|
|
99
|
+
it('半行输入的各种形态都不抛异常', async () => {
|
|
100
|
+
const tails = [' 返回 h.', ' 令 y 定义为 司机 包含 alter 将 设为', '规则 坏 给定 h 作为 车', ' 返回 Ho', '定义 车主 包含 jah'];
|
|
101
|
+
for (const tail of tails) {
|
|
102
|
+
const doc = docOf([...DECLS, '规则 坏 给定 h 作为 车主,产出 整数:', tail, '']);
|
|
103
|
+
await hoverAt(doc, { line: DECLS.length + 1, character: tail.length - 1 });
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=resolution-hover.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution-hover.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-hover.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,29 +3,21 @@ import assert from 'node:assert/strict';
|
|
|
3
3
|
import { vocabularyRegistry, initBuiltinVocabularies, } from '../../../src/config/lexicons/identifiers/registry.js';
|
|
4
4
|
import { canonicalize } from '../../../src/frontend/canonicalizer.js';
|
|
5
5
|
import { ZH_CN } from '../../../src/config/lexicons/zh-CN.js';
|
|
6
|
+
import { lookup } from '../../../src/config/lexicons/identifiers/scopes.js';
|
|
6
7
|
import { buildCanonicalizeOptions } from '../../../src/lsp/canonicalize-options.js';
|
|
7
8
|
import { applyTenantInitOptions, resolveTenantContext } from '../../../src/lsp/tenant-init.js';
|
|
8
9
|
/**
|
|
9
10
|
* 租户领域词汇必须参与 LSP 的解析(issue #161)。
|
|
10
11
|
*
|
|
11
12
|
* ★缺口有**两半**,缺任一半都等于没做:
|
|
12
|
-
* 1. LSP 进程不知道自己在为哪个租户服务 ——
|
|
13
|
-
* Origin + 共享 token,不传租户身份。已改为由客户端在 `initialize` 的
|
|
13
|
+
* 1. LSP 进程不知道自己在为哪个租户服务 —— 已改为由客户端在 `initialize` 的
|
|
14
14
|
* `initializationOptions` 里推送 `{ tenantId, domainVocabularies }`。
|
|
15
|
-
* 2.
|
|
16
|
-
*
|
|
17
|
-
* 而 LSP 此前调用的是 `canonicalize(text, lexicon)` —— 只传 lexicon,
|
|
18
|
-
* 那条分支(要求 `opts.domain && opts.locale` 同时存在)根本走不到。
|
|
15
|
+
* 2. LSP 必须把该租户的词汇作用域交给 canonicalize(字面量宏)与后续名称解析
|
|
16
|
+
* (ADR 0051:标识符按位置解析,canonicalize 不再替换标识符)。
|
|
19
17
|
*
|
|
20
18
|
* 本测试两半都锁:
|
|
21
|
-
* · 第 2
|
|
19
|
+
* · 第 2 半——buildCanonicalizeOptions 在传/不传租户上下文时取到的词汇作用域
|
|
22
20
|
* · 第 1 半——`applyTenantInitOptions` 是否真的把词汇注册进去
|
|
23
|
-
*
|
|
24
|
-
* ★为什么第 1 半非补不可:原先它只由 `server.ts` 承担,而那个模块顶层就
|
|
25
|
-
* `createConnection()`,单测无法 import。实测把 server.ts 整段注册逻辑改成
|
|
26
|
-
* `if (false)`,本文件 6 条用例**仍然全绿**——契约证明"canonicalizer 会用
|
|
27
|
-
* 租户词汇",证明不了"LSP 真的注册了"。已把决策点抽成无副作用的
|
|
28
|
-
* `src/lsp/tenant-init.ts`(与 aster-lang-ts#162 同一修法)。
|
|
29
21
|
*/
|
|
30
22
|
const TENANT = 'tenant-vocab-test';
|
|
31
23
|
const DOMAIN = 'insurance.vocabtest';
|
|
@@ -40,36 +32,31 @@ const VOCAB = {
|
|
|
40
32
|
functions: [{ canonical: 'coverageAmount', localized: '保额', kind: 'function' }],
|
|
41
33
|
};
|
|
42
34
|
const SRC = '模块 probe。\n\n规则 main 产出 Int:\n 返回 保额()。\n';
|
|
35
|
+
function vocabularyOf(opts) {
|
|
36
|
+
return opts && 'vocabulary' in opts ? opts.vocabulary : undefined;
|
|
37
|
+
}
|
|
43
38
|
describe('租户领域词汇参与解析', () => {
|
|
44
|
-
it('
|
|
39
|
+
it('★有完整租户上下文时,LSP 传的是带该租户词汇作用域的 options', () => {
|
|
45
40
|
initBuiltinVocabularies();
|
|
46
41
|
vocabularyRegistry.registerCustom(TENANT, VOCAB);
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
});
|
|
53
|
-
assert.ok(out.includes('coverageAmount'), `「保额」应被规范化为 coverageAmount,实际输出:${out.slice(0, 120)}`);
|
|
42
|
+
const opts = buildCanonicalizeOptions(ZH_CN, TENANT, DOMAIN);
|
|
43
|
+
const scopes = vocabularyOf(opts);
|
|
44
|
+
assert.ok(scopes, 'LSP 应传 options 对象而非裸 lexicon,否则租户词汇走不到');
|
|
45
|
+
assert.equal(opts.lexicon, ZH_CN);
|
|
46
|
+
assert.deepEqual(lookup(scopes.functions, '保额').exact.map((c) => c.canonical), ['coverageAmount']);
|
|
54
47
|
});
|
|
55
|
-
it('
|
|
48
|
+
it('★canonicalize 不再替换标识符:本地化词保持原写法,交由名称解析', () => {
|
|
56
49
|
initBuiltinVocabularies();
|
|
57
50
|
vocabularyRegistry.registerCustom(TENANT, VOCAB);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const out = canonicalize(SRC, ZH_CN);
|
|
61
|
-
assert.ok(!out.includes('coverageAmount'), `未传租户时不得应用其词汇(跨租户泄露),实际输出:${out.slice(0, 120)}`);
|
|
51
|
+
const out = canonicalize(SRC, buildCanonicalizeOptions(ZH_CN, TENANT, DOMAIN));
|
|
52
|
+
assert.ok(out.includes('保额') && !out.includes('coverageAmount'), `实际输出:${out.slice(0, 120)}`);
|
|
62
53
|
});
|
|
63
54
|
it('★另一个租户拿不到本租户的词汇(隔离性)', () => {
|
|
64
55
|
initBuiltinVocabularies();
|
|
65
56
|
vocabularyRegistry.registerCustom(TENANT, VOCAB);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
domain: DOMAIN,
|
|
70
|
-
locale: 'zh-CN',
|
|
71
|
-
});
|
|
72
|
-
assert.ok(!out.includes('coverageAmount'), `租户隔离被打破:other-tenant 用到了 ${TENANT} 的词汇`);
|
|
57
|
+
// 没有这一条,把实现写成「无条件查所有租户词汇」也能让上面变绿——
|
|
58
|
+
// 而那会造成**跨租户词汇泄露**:A 租户的术语在 B 租户的文档里生效。
|
|
59
|
+
assert.equal(buildCanonicalizeOptions(ZH_CN, 'some-other-tenant', DOMAIN), ZH_CN, `租户隔离被打破:other-tenant 用到了 ${TENANT} 的词汇`);
|
|
73
60
|
});
|
|
74
61
|
it('无效词汇表被拒绝(registerCustom 有校验,不静默接受)', () => {
|
|
75
62
|
initBuiltinVocabularies();
|
|
@@ -77,20 +64,7 @@ describe('租户领域词汇参与解析', () => {
|
|
|
77
64
|
// 否则损坏的词汇会在解析期以更难定位的方式炸。
|
|
78
65
|
assert.throws(() => vocabularyRegistry.registerCustom(TENANT, { id: 'bad', name: 'x' }), /.+/);
|
|
79
66
|
});
|
|
80
|
-
|
|
81
|
-
*
|
|
82
|
-
* ★上面四条只锁 canonicalizer 契约。实测把 LSP 里的租户参数删掉
|
|
83
|
-
* (回到缺陷版)后,那四条**仍然全绿** —— 契约对了不等于调用方传了。
|
|
84
|
-
* 故必须对 LSP 实际构造的参数单独断言。
|
|
85
|
-
*/
|
|
86
|
-
it('★有完整租户上下文时,LSP 传的是带 tenantId/domain 的 options', () => {
|
|
87
|
-
const opts = buildCanonicalizeOptions(ZH_CN, TENANT, DOMAIN);
|
|
88
|
-
assert.ok(opts && typeof opts === 'object' && 'tenantId' in opts, 'LSP 应传 options 对象而非裸 lexicon,否则自定义词汇分支走不到');
|
|
89
|
-
assert.equal(opts.tenantId, TENANT);
|
|
90
|
-
assert.equal(opts.domain, DOMAIN);
|
|
91
|
-
assert.equal(opts.locale, ZH_CN.id, 'locale 必须跟随 lexicon —— canonicalizer 按 (tenant, domain, locale) 三元组查');
|
|
92
|
-
});
|
|
93
|
-
it('★缺任一项即回退裸 lexicon(半套参数会静默走内置,比报错更难查)', () => {
|
|
67
|
+
it('★缺任一项即回退裸 lexicon(半套参数查不到租户那一份)', () => {
|
|
94
68
|
assert.equal(buildCanonicalizeOptions(ZH_CN, undefined, DOMAIN), ZH_CN, '缺 tenantId 应回退');
|
|
95
69
|
assert.equal(buildCanonicalizeOptions(ZH_CN, TENANT, undefined), ZH_CN, '缺 domain 应回退');
|
|
96
70
|
assert.equal(buildCanonicalizeOptions(undefined, TENANT, DOMAIN), undefined, '无 lexicon 时保持 undefined');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-vocabulary.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/tenant-vocabulary.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE/F
|
|
1
|
+
{"version":3,"file":"tenant-vocabulary.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/tenant-vocabulary.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { lex } from '../../../src/frontend/lexer.js';
|
|
|
8
8
|
import { parse } from '../../../src/parser.js';
|
|
9
9
|
import { lowerModule } from '../../../src/lower_to_core.js';
|
|
10
10
|
import { computeNodeIds } from '../../../src/nodeid/node-id-map.js';
|
|
11
|
-
import { generateCandidates, collectLiteralNodes } from '../../../src/mapping/candidate-generator.js';
|
|
11
|
+
import { generateCandidates, relocateToSource, collectLiteralNodes } from '../../../src/mapping/candidate-generator.js';
|
|
12
12
|
import { verifyMapping } from '../../../src/mapping/mapping-ir.js';
|
|
13
13
|
/**
|
|
14
14
|
* 确定性候选映射生成器(ADR 0037 §3/§7)。
|
|
@@ -91,6 +91,59 @@ describe('确定性候选生成器', () => {
|
|
|
91
91
|
const outOfBounds = r.skipped.find(s => s.nodeId === '$.oob');
|
|
92
92
|
assert.match(outOfBounds?.why ?? '', /超出源码范围/, `实际:${outOfBounds?.why}`);
|
|
93
93
|
});
|
|
94
|
+
it('★列号越过该行行尾时跳过,不得切进下一行(aster-lang-ts#238)', () => {
|
|
95
|
+
const r = generateCandidates('ab\ncd\n', [
|
|
96
|
+
{ nodeId: '$.overflow', kind: 'Int', origin: { start: { line: 1, col: 2 }, end: { line: 1, col: 5 } } },
|
|
97
|
+
{ nodeId: '$.lineEnd', kind: 'Int', origin: { start: { line: 1, col: 2 }, end: { line: 1, col: 3 } } },
|
|
98
|
+
]);
|
|
99
|
+
assert.deepEqual(r.candidates.map(c => [c.nodeId, c.text]), [['$.lineEnd', 'b']]);
|
|
100
|
+
assert.match(r.skipped.find(s => s.nodeId === '$.overflow')?.why ?? '', /超出源码范围/);
|
|
101
|
+
});
|
|
102
|
+
it('★重定位:canonical 删了冠词,候选区间仍指向原文里的同一段文本', () => {
|
|
103
|
+
const source = 'Let the total be 42 plus the 42.';
|
|
104
|
+
const canonical = 'Let total be 42 plus 42.';
|
|
105
|
+
const r = relocateToSource(source, canonical, {
|
|
106
|
+
candidates: [
|
|
107
|
+
{ span: { start: 13, end: 15 }, text: '42', nodeId: '$.a' },
|
|
108
|
+
{ span: { start: 21, end: 23 }, text: '42', nodeId: '$.b' },
|
|
109
|
+
],
|
|
110
|
+
skipped: [],
|
|
111
|
+
});
|
|
112
|
+
assert.deepEqual(r.candidates.map(c => [c.nodeId, c.span, source.slice(c.span.start, c.span.end)]), [['$.a', { start: 17, end: 19 }, '42'], ['$.b', { start: 29, end: 31 }, '42']]);
|
|
113
|
+
assert.deepEqual(r.skipped, []);
|
|
114
|
+
});
|
|
115
|
+
it('★重定位:canonicalize 增删了同样的子串时不按序号硬配,跳过并报告', () => {
|
|
116
|
+
// 智能引号归一化:原文只有一个直引号 "x",canonical 有两个;按序号配对会把第一个字面量配到第二个上。
|
|
117
|
+
const r = relocateToSource('Return “x” plus "x".', 'Return "x" plus "x".', {
|
|
118
|
+
candidates: [
|
|
119
|
+
{ span: { start: 7, end: 10 }, text: '"x"', nodeId: '$.a' },
|
|
120
|
+
{ span: { start: 16, end: 19 }, text: '"x"', nodeId: '$.b' },
|
|
121
|
+
],
|
|
122
|
+
skipped: [],
|
|
123
|
+
});
|
|
124
|
+
assert.deepEqual(r.candidates, []);
|
|
125
|
+
assert.deepEqual(r.skipped.map(s => s.nodeId), ['$.a', '$.b']);
|
|
126
|
+
assert.ok(r.skipped.every(s => /出现次数不同/.test(s.why)), JSON.stringify(r.skipped));
|
|
127
|
+
});
|
|
128
|
+
it('★起点不得落在行尾换行符上(终点可以,它是开区间)', () => {
|
|
129
|
+
const r = generateCandidates('ab\ncd\n', [
|
|
130
|
+
{ nodeId: '$.startAtEol', kind: 'Int', origin: { start: { line: 1, col: 3 }, end: { line: 2, col: 2 } } },
|
|
131
|
+
]);
|
|
132
|
+
assert.deepEqual(r.candidates, []);
|
|
133
|
+
assert.match(r.skipped[0]?.why ?? '', /超出源码范围/);
|
|
134
|
+
});
|
|
135
|
+
it('★重定位:原文同一行找不到候选文本、或行数不同,都跳过并报告', () => {
|
|
136
|
+
const notFound = relocateToSource('Return 42.', 'Return 42.', {
|
|
137
|
+
candidates: [{ span: { start: 7, end: 9 }, text: '42', nodeId: '$.x' }], skipped: [],
|
|
138
|
+
});
|
|
139
|
+
assert.deepEqual(notFound.candidates, []);
|
|
140
|
+
assert.match(notFound.skipped[0]?.why ?? '', /出现次数不同(原文 0,canonical 1)/);
|
|
141
|
+
const lines = relocateToSource('a\nb', 'a', {
|
|
142
|
+
candidates: [{ span: { start: 0, end: 1 }, text: 'a', nodeId: '$.y' }], skipped: [],
|
|
143
|
+
});
|
|
144
|
+
assert.deepEqual(lines.candidates, []);
|
|
145
|
+
assert.match(lines.skipped[0]?.why ?? '', /行数不同/);
|
|
146
|
+
});
|
|
94
147
|
it('★全语料闭环:生成的候选必须能被 verifier 判定,且零 REJECTED', () => {
|
|
95
148
|
// 这是本模块的核心主张:机械生成 + 机械验证 = 零误差闭环。
|
|
96
149
|
// 若出现 REJECTED,说明生成器切错了位置(候选文本与节点值对不上)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidate-generator.test.js","sourceRoot":"","sources":["../../../../test/unit/mapping/candidate-generator.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"candidate-generator.test.js","sourceRoot":"","sources":["../../../../test/unit/mapping/candidate-generator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from 'node:test';
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
|
-
import { runSemanticBridge } from '../../../src/mapping/pipeline.js';
|
|
3
|
+
import { BRIDGE_DIAGNOSTIC, runSemanticBridge } from '../../../src/mapping/pipeline.js';
|
|
4
4
|
/**
|
|
5
5
|
* 可验证语义桥的**端到端**门禁(ADR 0037 §7 接线)。
|
|
6
6
|
*
|
|
@@ -105,4 +105,25 @@ describe('语义桥端到端 — 任意文字(分层降级)', () => {
|
|
|
105
105
|
}
|
|
106
106
|
});
|
|
107
107
|
});
|
|
108
|
+
describe('语义桥端到端 — 坐标系与失败分类(aster-lang-ts#238)', () => {
|
|
109
|
+
it('★候选区间是原文坐标:英文冠词被 canonicalize 删除后仍指向原文里的字面量', () => {
|
|
110
|
+
const src = 'Module m.\n\nRule f, produce Int:\n Let the total be 42.\n Return the total.\n';
|
|
111
|
+
const r = runSemanticBridge(src);
|
|
112
|
+
assert.deepEqual(r.verified.map(v => [v.result.verdict, src.slice(v.mapping.span.start, v.mapping.span.end)]), [['VERIFIED', '42']]);
|
|
113
|
+
// 复核接口要求 span 宽度等于 text 长度。
|
|
114
|
+
assert.ok(r.verified.every(v => v.mapping.span.end - v.mapping.span.start === v.mapping.text.length));
|
|
115
|
+
});
|
|
116
|
+
it('★语法错误不得在残缺树上生成候选,必须报告为语法错误', () => {
|
|
117
|
+
const r = runSemanticBridge('Module m.\n\nRule f, produce Int:\n Return 42 +.\n');
|
|
118
|
+
assert.deepEqual(r.verified, []);
|
|
119
|
+
assert.ok(r.diagnostics.some(d => d.startsWith(BRIDGE_DIAGNOSTIC.syntaxError)), `实际:${JSON.stringify(r.diagnostics)}`);
|
|
120
|
+
assert.ok(!r.diagnostics.some(d => d.startsWith(BRIDGE_DIAGNOSTIC.internalError)));
|
|
121
|
+
});
|
|
122
|
+
it('★lex 失败归为编译失败,而不是内部错误', () => {
|
|
123
|
+
const r = runSemanticBridge('Module m.\n\nRule f, produce Int:\n Return 1 § 2.\n');
|
|
124
|
+
assert.deepEqual(r.verified, []);
|
|
125
|
+
assert.ok(r.diagnostics.some(d => d.startsWith(BRIDGE_DIAGNOSTIC.compileFailed) || d.startsWith(BRIDGE_DIAGNOSTIC.syntaxError)), `实际:${JSON.stringify(r.diagnostics)}`);
|
|
126
|
+
assert.ok(!r.diagnostics.some(d => d.startsWith(BRIDGE_DIAGNOSTIC.internalError)));
|
|
127
|
+
});
|
|
128
|
+
});
|
|
108
129
|
//# sourceMappingURL=pipeline.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../../test/unit/mapping/pipeline.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../../test/unit/mapping/pipeline.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -691,6 +691,22 @@ Rule broken, produce Int:
|
|
|
691
691
|
assert.ok(result.diagnostics.length > 0, '应有诊断信息');
|
|
692
692
|
assert.match(result.diagnostics[0].message, /Expected '.' at end of statement/);
|
|
693
693
|
});
|
|
694
|
+
// #240:Return 与其他语句一样必须以句点收尾,换行/块末/文件末不能代替(对齐 Java returnStmt)
|
|
695
|
+
for (const [label, body, line] of [
|
|
696
|
+
['块末', 'Return 7\n', 4],
|
|
697
|
+
['文件末', 'Return 7', 4],
|
|
698
|
+
['块中', 'Return 7\n Return 8.\n', 4],
|
|
699
|
+
['If 块内', 'If true:\n Return 1\n Return 2.\n', 5],
|
|
700
|
+
]) {
|
|
701
|
+
test(`Return 缺少结尾句点(${label})时应收集诊断`, () => {
|
|
702
|
+
const result = parseWithDiag(`Module test.parser.return.missing_period.\n\nRule f, produce Int:\n ${body}`);
|
|
703
|
+
assert.ok(result.diagnostics.length > 0, '应有诊断信息');
|
|
704
|
+
const diag = result.diagnostics[0];
|
|
705
|
+
assert.equal(diag.code, 'P005');
|
|
706
|
+
assert.match(diag.message, /Expected '.' at end of statement/);
|
|
707
|
+
assert.equal(diag.span?.start.line, line);
|
|
708
|
+
});
|
|
709
|
+
}
|
|
694
710
|
test('Set 语句不应被 canonicalizer 转换为 Let(回归测试)', () => {
|
|
695
711
|
// 确保 set-to transformer 不会将 "Set x to y" 语句错误地转换为 "Let x be y"
|
|
696
712
|
const module = parseSource(`
|
|
@@ -1404,6 +1420,12 @@ Rule greet given name as Text, produce Text:
|
|
|
1404
1420
|
const r = parseWithDiag('Module a.b.\nRule f given x, produce:\n Return Score(5).\nType Score as Int.\n');
|
|
1405
1421
|
assert.equal(r.diagnostics.filter(d => d.severity === 'error').length, 0);
|
|
1406
1422
|
});
|
|
1423
|
+
it('type alias 名按出现顺序记入 Module.typeAliases;无别名时省略该字段(ADR 0051)', () => {
|
|
1424
|
+
const m = parseSource('Module a.b.\nType Score as Int.\nType Tags as list of Text.\n');
|
|
1425
|
+
assert.deepEqual(m.typeAliases, ['Score', 'Tags']);
|
|
1426
|
+
assert.equal(m.decls.length, 0, '别名不产出声明');
|
|
1427
|
+
assert.equal('typeAliases' in parseSource('Module a.b.\nDefine P has x as Int.\n'), false);
|
|
1428
|
+
});
|
|
1407
1429
|
it('预扫描只认顶层声明头:非顶层位置的 type 不误登记(与函数调用不冲突)', () => {
|
|
1408
1430
|
// 即便后续函数名与某些声明结构词相近,预扫描的顶层位置判定也不应把普通函数调用拦成构造。
|
|
1409
1431
|
const r = parseWithDiag('Module a.b.\nDefine Event has kind, payload.\n'
|