@blockml/validator 0.8.0 → 0.9.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/blocks/org/blockml/bml/compiler/validator/Library.bml +15 -2
- package/blocks/org/blockml/bml/compiler/validator/capability/Validate.bml +4 -1
- package/blocks/org/blockml/bml/compiler/validator/capability/ValidateStyle.bml +47 -0
- package/blocks/org/blockml/bml/compiler/validator/documentation/DesignDecisions.bml +5 -2
- package/blocks/org/blockml/bml/compiler/validator/documentation/Diagnostics.bml +6 -3
- package/blocks/org/blockml/bml/compiler/validator/documentation/Introduction.bml +2 -2
- package/blocks/org/blockml/bml/compiler/validator/documentation/LayerSeparation.bml +4 -4
- package/blocks/org/blockml/bml/compiler/validator/documentation/PackageOwnership.bml +4 -3
- package/blocks/org/blockml/bml/compiler/validator/documentation/PublicApi.bml +11 -5
- package/blocks/org/blockml/bml/compiler/validator/documentation/ScopeExclusions.bml +5 -3
- package/blocks/org/blockml/bml/compiler/validator/documentation/ValidationPipeline.bml +6 -4
- package/blocks/org/blockml/bml/compiler/validator/documentation/ValidityContract.bml +5 -4
- package/blocks/org/blockml/bml/compiler/validator/style/PreferCDataWhenNeedsEscape.bml +27 -0
- package/blocks/org/blockml/bml/compiler/validator/style/PreferEmptyElementSelfClosing.bml +25 -0
- package/blocks/org/blockml/bml/compiler/validator/style/PreferMarkdownStructure.bml +25 -0
- package/blocks/org/blockml/bml/compiler/validator/style/StyleCheck.bml +27 -0
- package/blocks/org/blockml/bml/compiler/validator/style/StyleRule.bml +53 -0
- package/blocks/org/blockml/bml/compiler/validator/style/rule/CDataWhenEscaping.bml +50 -0
- package/blocks/org/blockml/bml/compiler/validator/style/rule/EmptyElementSelfClosing.bml +50 -0
- package/blocks/org/blockml/bml/compiler/validator/style/rule/MarkdownStructure.bml +50 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/validate-style.d.ts +10 -0
- package/dist/validate-style.d.ts.map +1 -0
- package/dist/validate-style.js +149 -0
- package/dist/validate-style.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +2 -0
- package/dist/validate.js.map +1 -1
- package/package.json +4 -4
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
22
22
|
xmlns:valcap="org.blockml.bml.compiler.validator.capability"
|
|
23
23
|
xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation"
|
|
24
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style"
|
|
24
25
|
xmlns:bomdocumentation="org.blockml.bml.bom.documentation">
|
|
25
26
|
|
|
26
27
|
<name>Library</name>
|
|
@@ -29,13 +30,16 @@
|
|
|
29
30
|
<is>The BlockML Validator compiler package library catalog</is>
|
|
30
31
|
|
|
31
32
|
<documentation>
|
|
33
|
+
# The BlockML Validator compiler package library catalog
|
|
34
|
+
|
|
32
35
|
Canonical validator specification for BlockML Stage-2 — validate() orchestration
|
|
33
|
-
on BomDocument using @blockml/framework utilities
|
|
36
|
+
on BomDocument using @blockml/framework utilities, plus the style catalog
|
|
37
|
+
(org.blockml.bml.compiler.validator.style.*). TypeScript in packages/validator/src/
|
|
34
38
|
implements this library. Urmodell and API types live in org.blockml.bml.bom.*
|
|
35
39
|
(@blockml/bom). Membership is defined exclusively by this blocks list.
|
|
36
40
|
</documentation>
|
|
37
41
|
|
|
38
|
-
<version>0.
|
|
42
|
+
<version>0.9.0</version>
|
|
39
43
|
|
|
40
44
|
<language>
|
|
41
45
|
<English />
|
|
@@ -63,6 +67,15 @@
|
|
|
63
67
|
<blocks>
|
|
64
68
|
<composition><validator:ValidatorType />
|
|
65
69
|
<valcap:Validate />
|
|
70
|
+
<valcap:ValidateStyle />
|
|
71
|
+
<valstyle:StyleRule />
|
|
72
|
+
<valstyle:StyleCheck />
|
|
73
|
+
<valstyle:PreferCDataWhenNeedsEscape />
|
|
74
|
+
<valstyle:PreferMarkdownStructure />
|
|
75
|
+
<valstyle:PreferEmptyElementSelfClosing />
|
|
76
|
+
<valstyle:CDataWhenEscaping />
|
|
77
|
+
<valstyle:MarkdownStructure />
|
|
78
|
+
<valstyle:EmptyElementSelfClosing />
|
|
66
79
|
<valdocumentation:Introduction />
|
|
67
80
|
<valdocumentation:ValidityContract />
|
|
68
81
|
<valdocumentation:LayerSeparation />
|
|
@@ -27,7 +27,9 @@
|
|
|
27
27
|
<baseType>core:Capability</baseType>
|
|
28
28
|
<is>Public entry: BomDocument → ValidateResult (B26)</is>
|
|
29
29
|
|
|
30
|
-
<documentation>Orchestrates TypeRegistry bootstrap/injection, forkBom,
|
|
30
|
+
<documentation>Orchestrates TypeRegistry bootstrap/injection, forkBom, semantic framework
|
|
31
|
+
checks, and validateStyle. Does not mutate input Urmodell. Style diagnostics never
|
|
32
|
+
fail success.</documentation>
|
|
31
33
|
|
|
32
34
|
<references>
|
|
33
35
|
<see type="valdocumentation:PublicApi" relation="SeeAlso" />
|
|
@@ -36,6 +38,7 @@
|
|
|
36
38
|
<see type="fwcap:ForkBom" relation="SeeAlso" />
|
|
37
39
|
<see type="fwcap:ValidateTypes" relation="SeeAlso" />
|
|
38
40
|
<see type="fwcap:ValidateConstraints" relation="SeeAlso" />
|
|
41
|
+
<see type="valcap:ValidateStyle" relation="SeeAlso" />
|
|
39
42
|
<see type="fwcap:BootstrapTypeRegistry" relation="SeeAlso" />
|
|
40
43
|
</references>
|
|
41
44
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Capability — ValidateStyle
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.capability.ValidateStyle
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
12
|
+
xmlns:bomapi="org.blockml.bml.bom.api"
|
|
13
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
14
|
+
xmlns:bomdoc="org.blockml.bml.bom.document"
|
|
15
|
+
xmlns:core="org.blockml.bml.core"
|
|
16
|
+
xmlns:def="org.blockml.bml.definition"
|
|
17
|
+
xmlns:type="org.blockml.bml.type"
|
|
18
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
19
|
+
xmlns:valcap="org.blockml.bml.compiler.validator.capability"
|
|
20
|
+
xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation"
|
|
21
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
22
|
+
|
|
23
|
+
<name>ValidateStyle</name>
|
|
24
|
+
<type>valcap:ValidateStyle</type>
|
|
25
|
+
<baseType>core:Capability</baseType>
|
|
26
|
+
<is>Run the BML style catalog against a BomDocument</is>
|
|
27
|
+
|
|
28
|
+
<documentation>Loads StyleRule documents from this package blocks/style/rule/, dispatches each
|
|
29
|
+
check type to a TypeScript interpreter, and returns diagnostics. Does not affect
|
|
30
|
+
success (warnings and recommendations only). Unknown check types emit
|
|
31
|
+
BML_STYLE_UNKNOWN_CHECK as info.</documentation>
|
|
32
|
+
|
|
33
|
+
<references>
|
|
34
|
+
<see type="valstyle:StyleRule" relation="SeeAlso" />
|
|
35
|
+
<see type="valcap:Validate" relation="SeeAlso" />
|
|
36
|
+
</references>
|
|
37
|
+
|
|
38
|
+
<properties>
|
|
39
|
+
<document type="bomdoc:BomDocument">
|
|
40
|
+
<documentation>document. TS type: bomdoc:BomDocument. (required)</documentation>
|
|
41
|
+
</document>
|
|
42
|
+
<result type="bomcommon:Diagnostic[]">
|
|
43
|
+
<documentation>Style diagnostics. TS type: bomcommon:Diagnostic[]. (required)</documentation>
|
|
44
|
+
</result>
|
|
45
|
+
</properties>
|
|
46
|
+
|
|
47
|
+
</block>
|
|
@@ -38,7 +38,10 @@
|
|
|
38
38
|
LSP and incremental validation scenarios.
|
|
39
39
|
|
|
40
40
|
success semantics: false when any diagnostic has severity === "error"; warnings
|
|
41
|
-
alone do not fail success.
|
|
41
|
+
and recommendations alone do not fail success.
|
|
42
|
+
|
|
43
|
+
Style catalog (validateStyle): BML StyleRule documents under style/rule/ are the SSOT.
|
|
44
|
+
Interpreters bind to StyleCheck type FQNs. Unknown checks emit BML_STYLE_UNKNOWN_CHECK.
|
|
42
45
|
|
|
43
46
|
Bootstrap modes: bootstrapPaths (corpus flat scan) or libraryPaths (Library.bml graph).
|
|
44
47
|
validateVersions runs after validateTypes and before validateConstraints.
|
|
@@ -50,7 +53,7 @@
|
|
|
50
53
|
serializer, validator, and compiler.</documentation>
|
|
51
54
|
|
|
52
55
|
<references>
|
|
53
|
-
<see type="valdocumentation:Diagnostics" relation="ReadNext"
|
|
56
|
+
<see type="valdocumentation:Diagnostics" relation="ReadNext" />
|
|
54
57
|
</references>
|
|
55
58
|
|
|
56
59
|
</block>
|
|
@@ -31,19 +31,22 @@
|
|
|
31
31
|
<is>Validator diagnostics and host abort policy</is>
|
|
32
32
|
|
|
33
33
|
<documentation>The validator aggregates diagnostics from framework utilities (validateTypes,
|
|
34
|
-
validateConstraints)
|
|
34
|
+
validateConstraints), bootstrap (when TypeRegistry is built inline), and validateStyle.
|
|
35
35
|
|
|
36
36
|
Diagnostic type: org.blockml.bml.bom.common.Diagnostic (shared across toolchain).
|
|
37
|
+
Style codes: BML_STYLE_PREFER_CDATA, BML_STYLE_PREFER_MARKDOWN,
|
|
38
|
+
BML_STYLE_EMPTY_ELEMENT_SELF_CLOSE, BML_STYLE_UNKNOWN_CHECK.
|
|
37
39
|
|
|
38
40
|
Host policy: CLI, IDE, and other orchestrators decide whether error diagnostics
|
|
39
41
|
block serialize, compile, or other downstream steps. The validator package does
|
|
40
42
|
not enforce abort-on-error — it reports diagnostics and success flag only.
|
|
43
|
+
Style warnings and recommendations do not fail success.
|
|
41
44
|
|
|
42
45
|
Cross-ref diagnostic codes: org.blockml.bml.framework.config.FrameworkDiagnosticCodes</documentation>
|
|
43
46
|
|
|
44
47
|
<references>
|
|
45
|
-
<see type="fwconfig:FrameworkDiagnosticCodes" relation="SeeAlso"
|
|
46
|
-
<see type="valdocumentation:PackageOwnership" relation="ReadNext"
|
|
48
|
+
<see type="fwconfig:FrameworkDiagnosticCodes" relation="SeeAlso" />
|
|
49
|
+
<see type="valdocumentation:PackageOwnership" relation="ReadNext" />
|
|
47
50
|
</references>
|
|
48
51
|
|
|
49
52
|
</block>
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
complete TypeRegistry. CLI validate and LSP share this engine.</documentation>
|
|
48
48
|
|
|
49
49
|
<references>
|
|
50
|
-
<see type="valdocumentation:ValidityContract" relation="ReadNext"
|
|
51
|
-
<see type="bomdocumentation:Introduction" relation="SeeAlso"
|
|
50
|
+
<see type="valdocumentation:ValidityContract" relation="ReadNext" />
|
|
51
|
+
<see type="bomdocumentation:Introduction" relation="SeeAlso" />
|
|
52
52
|
</references>
|
|
53
53
|
|
|
54
54
|
</block>
|
|
@@ -37,15 +37,15 @@
|
|
|
37
37
|
validateTypes, validateConstraints, bootstrapTypeRegistry. Validator calls these;
|
|
38
38
|
does not reimplement them.
|
|
39
39
|
|
|
40
|
-
org.blockml.bml.compiler.validator.* (this package) — validate() orchestration
|
|
41
|
-
and Stage-2 entry point
|
|
40
|
+
org.blockml.bml.compiler.validator.* (this package) — validate() orchestration,
|
|
41
|
+
style catalog (org.blockml.bml.compiler.validator.style.*), and Stage-2 entry point.
|
|
42
42
|
|
|
43
43
|
org.blockml.bml.compiler.parser.* (@blockml/parser) — BML → BomDocument (Stage 1).
|
|
44
44
|
Validator consumes parser output; does not call parse() directly (bootstrap is via framework).</documentation>
|
|
45
45
|
|
|
46
46
|
<references>
|
|
47
|
-
<see type="valdocumentation:ValidationPipeline" relation="ReadNext"
|
|
48
|
-
<see type="fwdocumentation:Introduction" relation="SeeAlso"
|
|
47
|
+
<see type="valdocumentation:ValidationPipeline" relation="ReadNext" />
|
|
48
|
+
<see type="fwdocumentation:Introduction" relation="SeeAlso" />
|
|
49
49
|
</references>
|
|
50
50
|
|
|
51
51
|
</block>
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
<baseType>core:Documentation</baseType>
|
|
31
31
|
<is>Toolchain package responsibilities for validation</is>
|
|
32
32
|
|
|
33
|
-
<documentation>@blockml/validator — validate() orchestration
|
|
33
|
+
<documentation>@blockml/validator — validate() orchestration, style catalog, ValidateResult assembly.
|
|
34
|
+
Owns this BML library including org.blockml.bml.compiler.validator.style.*.
|
|
34
35
|
|
|
35
36
|
@blockml/bom — Urmodell types, ValidateOptions/ValidateResult (B26), Diagnostic.
|
|
36
37
|
Validator consumes; does not redefine.
|
|
@@ -43,8 +44,8 @@
|
|
|
43
44
|
@blockml/cli — validate command host; may inject TypeRegistry or bootstrap paths.</documentation>
|
|
44
45
|
|
|
45
46
|
<references>
|
|
46
|
-
<see type="valdocumentation:ScopeExclusions" relation="ReadNext"
|
|
47
|
-
<see type="bomdocumentation:PackageOwnership" relation="SeeAlso"
|
|
47
|
+
<see type="valdocumentation:ScopeExclusions" relation="ReadNext" />
|
|
48
|
+
<see type="bomdocumentation:PackageOwnership" relation="SeeAlso" />
|
|
48
49
|
</references>
|
|
49
50
|
|
|
50
51
|
</block>
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
<baseType>core:Documentation</baseType>
|
|
29
29
|
<is>validate() entry point (B26)</is>
|
|
30
30
|
|
|
31
|
-
<documentation>validate(document: BomDocument, options?: ValidateOptions): ValidateResult
|
|
31
|
+
<documentation> validate(document: BomDocument, options?: ValidateOptions): ValidateResult
|
|
32
|
+
validateStyle(document: BomDocument): Diagnostic[]
|
|
32
33
|
|
|
33
34
|
ValidateOptions (owned by @blockml/bom):
|
|
34
35
|
• typeRegistry — pre-built TypeRegistryReader / TypeRegistry instance (optional)
|
|
@@ -40,13 +41,18 @@
|
|
|
40
41
|
• diagnostics — Diagnostic[]
|
|
41
42
|
• success — false if any error-severity diagnostic
|
|
42
43
|
|
|
44
|
+
Style: validateStyle runs after semantic checks. Catalog SSOT lives under
|
|
45
|
+
org.blockml.bml.compiler.validator.style.*. Warnings and recommendations do not
|
|
46
|
+
fail success.
|
|
47
|
+
|
|
43
48
|
Sync only; does not throw on validation errors. Host decides abort policy.</documentation>
|
|
44
49
|
|
|
45
50
|
<references>
|
|
46
|
-
<see type="bomapi:ValidateOptions" relation="Defines"
|
|
47
|
-
<see type="bomapi:ValidateResult" relation="Defines"
|
|
48
|
-
<see type="valcap:Validate" relation="Defines"
|
|
49
|
-
<see type="
|
|
51
|
+
<see type="bomapi:ValidateOptions" relation="Defines" />
|
|
52
|
+
<see type="bomapi:ValidateResult" relation="Defines" />
|
|
53
|
+
<see type="valcap:Validate" relation="Defines" />
|
|
54
|
+
<see type="valcap:ValidateStyle" relation="Defines" />
|
|
55
|
+
<see type="valdocumentation:DesignDecisions" relation="ReadNext" />
|
|
50
56
|
</references>
|
|
51
57
|
|
|
52
58
|
</block>
|
|
@@ -31,8 +31,9 @@
|
|
|
31
31
|
<documentation>Out of scope for @blockml/validator:
|
|
32
32
|
|
|
33
33
|
• TypeRegistry implementation — @blockml/framework
|
|
34
|
-
• Individual validation rules — @blockml/framework (validateTypes, validateEmbeddedBlocks,
|
|
34
|
+
• Individual semantic validation rules — @blockml/framework (validateTypes, validateEmbeddedBlocks,
|
|
35
35
|
validateInstances, validatePresets, validateVisibility, validateReadOnly, validateConstraints)
|
|
36
|
+
• Style/quality rules — in scope here (validateStyle + style catalog)
|
|
36
37
|
• SCAD / MachineBlocks Stage-3 render validation
|
|
37
38
|
• MemberGroups axis constraints (Category / AiUsage) — MachineBlocks-only; see docs/TODOs
|
|
38
39
|
• parse() / serialize() — @blockml/parser / @blockml/serializer
|
|
@@ -40,10 +41,11 @@
|
|
|
40
41
|
• CLI file I/O — @blockml/cli
|
|
41
42
|
• Language BML corpus — @blockml/core (npm)
|
|
42
43
|
|
|
43
|
-
In scope: validate() orchestration on BomDocument with framework utilities
|
|
44
|
+
In scope: validate() orchestration on BomDocument with framework utilities and the
|
|
45
|
+
style catalog.</documentation>
|
|
44
46
|
|
|
45
47
|
<references>
|
|
46
|
-
<see type="valdocumentation:Introduction" relation="SeeAlso"
|
|
48
|
+
<see type="valdocumentation:Introduction" relation="SeeAlso" />
|
|
47
49
|
</references>
|
|
48
50
|
|
|
49
51
|
</block>
|
|
@@ -41,8 +41,9 @@
|
|
|
41
41
|
8. validateVisibility(pragmaticModel, registry) → append diagnostics
|
|
42
42
|
9. validateReadOnly(pragmaticModel, registry) → append diagnostics
|
|
43
43
|
10. validateConstraints(pragmaticModel, registry) → append diagnostics
|
|
44
|
-
11.
|
|
45
|
-
12.
|
|
44
|
+
11. validateStyle(pragmaticModel) → append warning/recommendation diagnostics
|
|
45
|
+
12. success = no diagnostic with severity === "error"
|
|
46
|
+
13. Return ValidateResult { pragmaticModel?, diagnostics, success }
|
|
46
47
|
|
|
47
48
|
When continueOnError === false and success === false, pragmaticModel is omitted
|
|
48
49
|
from the result (early return with diagnostics only).
|
|
@@ -51,8 +52,9 @@
|
|
|
51
52
|
MemberGroups axis constraints (MB-only).</documentation>
|
|
52
53
|
|
|
53
54
|
<references>
|
|
54
|
-
<see type="valdocumentation:PublicApi" relation="ReadNext"
|
|
55
|
-
<see type="valcap:Validate" relation="Defines"
|
|
55
|
+
<see type="valdocumentation:PublicApi" relation="ReadNext" />
|
|
56
|
+
<see type="valcap:Validate" relation="Defines" />
|
|
57
|
+
<see type="valcap:ValidateStyle" relation="SeeAlso" />
|
|
56
58
|
</references>
|
|
57
59
|
|
|
58
60
|
</block>
|
|
@@ -34,8 +34,9 @@
|
|
|
34
34
|
CLI blockml validate and LSP analyzeDocument consume the same parse + validate engine.
|
|
35
35
|
Generated XSD is a non-authoritative render-target projection and is not consulted.
|
|
36
36
|
|
|
37
|
-
Severity: error = not valid BlockML; warning = valid but problematic (deprecation
|
|
38
|
-
|
|
37
|
+
Severity: error = not valid BlockML; warning = valid but problematic (deprecation
|
|
38
|
+
or mechanical style); recommendation = quality improvement; info = hint.
|
|
39
|
+
Unknown element, attribute, member, type, block, or missing library is error.
|
|
39
40
|
|
|
40
41
|
Semantic checks (this package / framework): every type FQN must resolve in the
|
|
41
42
|
TypeRegistry or be a well-known primitive; instance typeFqn and memberValues keys
|
|
@@ -48,8 +49,8 @@
|
|
|
48
49
|
Unknown instance members stay in memberValues plus BML_UNKNOWN_PROPERTY error.</documentation>
|
|
49
50
|
|
|
50
51
|
<references>
|
|
51
|
-
<see type="pardocumentation:StructuralGrammar" relation="SeeAlso"
|
|
52
|
-
<see type="valdocumentation:ValidationPipeline" relation="ReadNext"
|
|
52
|
+
<see type="pardocumentation:StructuralGrammar" relation="SeeAlso" />
|
|
53
|
+
<see type="valdocumentation:ValidationPipeline" relation="ReadNext" />
|
|
53
54
|
</references>
|
|
54
55
|
|
|
55
56
|
</block>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style Check — PreferCDataWhenNeedsEscape
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.PreferCDataWhenNeedsEscape
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:core="org.blockml.bml.core"
|
|
12
|
+
xmlns:def="org.blockml.bml.definition"
|
|
13
|
+
xmlns:type="org.blockml.bml.type"
|
|
14
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
15
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
16
|
+
|
|
17
|
+
<name>PreferCDataWhenNeedsEscape</name>
|
|
18
|
+
<type>valstyle:PreferCDataWhenNeedsEscape</type>
|
|
19
|
+
<baseType>valstyle:StyleCheck</baseType>
|
|
20
|
+
<is>Recommend CDATA when documentation text contains and or less-than</is>
|
|
21
|
+
|
|
22
|
+
<documentation><![CDATA[
|
|
23
|
+
Matches block-level documentation prose whose text contains & or <
|
|
24
|
+
and authoredCharacterDataForm is not cdata.
|
|
25
|
+
]]></documentation>
|
|
26
|
+
|
|
27
|
+
</block>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style Check — PreferEmptyElementSelfClosing
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.PreferEmptyElementSelfClosing
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:core="org.blockml.bml.core"
|
|
12
|
+
xmlns:def="org.blockml.bml.definition"
|
|
13
|
+
xmlns:type="org.blockml.bml.type"
|
|
14
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
15
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
16
|
+
|
|
17
|
+
<name>PreferEmptyElementSelfClosing</name>
|
|
18
|
+
<type>valstyle:PreferEmptyElementSelfClosing</type>
|
|
19
|
+
<baseType>valstyle:StyleCheck</baseType>
|
|
20
|
+
<is>Warn when an empty see reference is authored as a paired tag</is>
|
|
21
|
+
|
|
22
|
+
<documentation>Matches DocumentationReference with empty context and authoredEmptyElementForm paired
|
|
23
|
+
(see open-close with no body). Preferred form is self-closing.</documentation>
|
|
24
|
+
|
|
25
|
+
</block>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style Check — PreferMarkdownStructure
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.PreferMarkdownStructure
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:core="org.blockml.bml.core"
|
|
12
|
+
xmlns:def="org.blockml.bml.definition"
|
|
13
|
+
xmlns:type="org.blockml.bml.type"
|
|
14
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
15
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
16
|
+
|
|
17
|
+
<name>PreferMarkdownStructure</name>
|
|
18
|
+
<type>valstyle:PreferMarkdownStructure</type>
|
|
19
|
+
<baseType>valstyle:StyleCheck</baseType>
|
|
20
|
+
<is>Recommend markdown structure for long block documentation</is>
|
|
21
|
+
|
|
22
|
+
<documentation>Matches block-level documentation longer than 280 characters with no blank
|
|
23
|
+
line, heading, or list marker. Short member documentation is out of scope.</documentation>
|
|
24
|
+
|
|
25
|
+
</block>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style — StyleCheck
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.StyleCheck
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:core="org.blockml.bml.core"
|
|
12
|
+
xmlns:def="org.blockml.bml.definition"
|
|
13
|
+
xmlns:type="org.blockml.bml.type"
|
|
14
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
15
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
16
|
+
|
|
17
|
+
<name>StyleCheck</name>
|
|
18
|
+
<type>valstyle:StyleCheck</type>
|
|
19
|
+
<baseType>validator:ValidatorType</baseType>
|
|
20
|
+
<is>Abstract marker for a style-check interpreter kind</is>
|
|
21
|
+
|
|
22
|
+
<documentation>Concrete check types bind to a TypeScript interpreter in validateStyle.
|
|
23
|
+
Unknown check types emit BML_STYLE_UNKNOWN_CHECK (info) and are skipped.</documentation>
|
|
24
|
+
|
|
25
|
+
<abstract>true</abstract>
|
|
26
|
+
|
|
27
|
+
</block>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style — StyleRule
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.StyleRule
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
12
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
13
|
+
xmlns:core="org.blockml.bml.core"
|
|
14
|
+
xmlns:def="org.blockml.bml.definition"
|
|
15
|
+
xmlns:type="org.blockml.bml.type"
|
|
16
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
17
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style"
|
|
18
|
+
xmlns:valdocumentation="org.blockml.bml.compiler.validator.documentation">
|
|
19
|
+
|
|
20
|
+
<name>StyleRule</name>
|
|
21
|
+
<type>valstyle:StyleRule</type>
|
|
22
|
+
<baseType>validator:ValidatorType</baseType>
|
|
23
|
+
<is>Catalog entry for a BML authoring quality rule</is>
|
|
24
|
+
|
|
25
|
+
<documentation>SSOT for one style check. Concrete rules extend this type. validateStyle loads
|
|
26
|
+
rule documents from this package blocks/ and dispatches on check type FQN.
|
|
27
|
+
Warnings and recommendations never set ValidateResult.success to false.</documentation>
|
|
28
|
+
|
|
29
|
+
<properties>
|
|
30
|
+
<code type="type:Text">
|
|
31
|
+
<documentation>Diagnostic code, e.g. BML_STYLE_PREFER_CDATA. (required)</documentation>
|
|
32
|
+
</code>
|
|
33
|
+
<severity type="bomcommon:DiagnosticSeverity">
|
|
34
|
+
<documentation>warning or recommendation for v1 style rules. (required)</documentation>
|
|
35
|
+
</severity>
|
|
36
|
+
<appliesTo type="type:Text">
|
|
37
|
+
<documentation>Human-readable target, e.g. block documentation. (required)</documentation>
|
|
38
|
+
</appliesTo>
|
|
39
|
+
<message type="type:Text">
|
|
40
|
+
<documentation>Diagnostic message emitted on match. (required)</documentation>
|
|
41
|
+
</message>
|
|
42
|
+
</properties>
|
|
43
|
+
|
|
44
|
+
<aggregations>
|
|
45
|
+
<check>
|
|
46
|
+
<documentation>StyleCheck subtype that selects the TypeScript interpreter. (required)</documentation>
|
|
47
|
+
<composition>
|
|
48
|
+
<valstyle:StyleCheck />
|
|
49
|
+
</composition>
|
|
50
|
+
</check>
|
|
51
|
+
</aggregations>
|
|
52
|
+
|
|
53
|
+
</block>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style Rule — CDataWhenEscaping
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.CDataWhenEscaping
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
12
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
13
|
+
xmlns:core="org.blockml.bml.core"
|
|
14
|
+
xmlns:def="org.blockml.bml.definition"
|
|
15
|
+
xmlns:type="org.blockml.bml.type"
|
|
16
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
17
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
18
|
+
|
|
19
|
+
<name>CDataWhenEscaping</name>
|
|
20
|
+
<type>valstyle:CDataWhenEscaping</type>
|
|
21
|
+
<baseType>valstyle:StyleRule</baseType>
|
|
22
|
+
<is>Recommend CDATA for documentation that needs XML escaping</is>
|
|
23
|
+
|
|
24
|
+
<documentation>Block-level documentation whose text contains markup characters should use CDATA
|
|
25
|
+
instead of entity escaping so humans can read the source.</documentation>
|
|
26
|
+
|
|
27
|
+
<properties>
|
|
28
|
+
<code override="true">
|
|
29
|
+
<value>BML_STYLE_PREFER_CDATA</value>
|
|
30
|
+
</code>
|
|
31
|
+
<severity override="true">
|
|
32
|
+
<value>recommendation</value>
|
|
33
|
+
</severity>
|
|
34
|
+
<appliesTo override="true">
|
|
35
|
+
<value>block documentation</value>
|
|
36
|
+
</appliesTo>
|
|
37
|
+
<message override="true">
|
|
38
|
+
<value>Use CDATA instead of XML entity escaping in documentation.</value>
|
|
39
|
+
</message>
|
|
40
|
+
</properties>
|
|
41
|
+
|
|
42
|
+
<aggregations>
|
|
43
|
+
<check>
|
|
44
|
+
<composition>
|
|
45
|
+
<valstyle:PreferCDataWhenNeedsEscape />
|
|
46
|
+
</composition>
|
|
47
|
+
</check>
|
|
48
|
+
</aggregations>
|
|
49
|
+
|
|
50
|
+
</block>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style Rule — EmptyElementSelfClosing
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.EmptyElementSelfClosing
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
12
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
13
|
+
xmlns:core="org.blockml.bml.core"
|
|
14
|
+
xmlns:def="org.blockml.bml.definition"
|
|
15
|
+
xmlns:type="org.blockml.bml.type"
|
|
16
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
17
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
18
|
+
|
|
19
|
+
<name>EmptyElementSelfClosing</name>
|
|
20
|
+
<type>valstyle:EmptyElementSelfClosing</type>
|
|
21
|
+
<baseType>valstyle:StyleRule</baseType>
|
|
22
|
+
<is>Require self-closing form for empty see references</is>
|
|
23
|
+
|
|
24
|
+
<documentation>Empty see tags should be written as self-closing elements:
|
|
25
|
+
see with attributes and slash, not a paired open-close with no body.</documentation>
|
|
26
|
+
|
|
27
|
+
<properties>
|
|
28
|
+
<code override="true">
|
|
29
|
+
<value>BML_STYLE_EMPTY_ELEMENT_SELF_CLOSE</value>
|
|
30
|
+
</code>
|
|
31
|
+
<severity override="true">
|
|
32
|
+
<value>warning</value>
|
|
33
|
+
</severity>
|
|
34
|
+
<appliesTo override="true">
|
|
35
|
+
<value>empty see reference</value>
|
|
36
|
+
</appliesTo>
|
|
37
|
+
<message override="true">
|
|
38
|
+
<value>Write empty elements as self-closing tags.</value>
|
|
39
|
+
</message>
|
|
40
|
+
</properties>
|
|
41
|
+
|
|
42
|
+
<aggregations>
|
|
43
|
+
<check>
|
|
44
|
+
<composition>
|
|
45
|
+
<valstyle:PreferEmptyElementSelfClosing />
|
|
46
|
+
</composition>
|
|
47
|
+
</check>
|
|
48
|
+
</aggregations>
|
|
49
|
+
|
|
50
|
+
</block>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Validator Style Rule — MarkdownStructure
|
|
3
|
+
FQN: org.blockml.bml.compiler.validator.style.MarkdownStructure
|
|
4
|
+
-->
|
|
5
|
+
<block
|
|
6
|
+
xmlns="http://blockml.org/bml"
|
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
8
|
+
xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
|
|
9
|
+
"
|
|
10
|
+
xmlns:blockml="org.blockml.bml"
|
|
11
|
+
xmlns:bom="org.blockml.bml.bom"
|
|
12
|
+
xmlns:bomcommon="org.blockml.bml.bom.common"
|
|
13
|
+
xmlns:core="org.blockml.bml.core"
|
|
14
|
+
xmlns:def="org.blockml.bml.definition"
|
|
15
|
+
xmlns:type="org.blockml.bml.type"
|
|
16
|
+
xmlns:validator="org.blockml.bml.compiler.validator"
|
|
17
|
+
xmlns:valstyle="org.blockml.bml.compiler.validator.style">
|
|
18
|
+
|
|
19
|
+
<name>MarkdownStructure</name>
|
|
20
|
+
<type>valstyle:MarkdownStructure</type>
|
|
21
|
+
<baseType>valstyle:StyleRule</baseType>
|
|
22
|
+
<is>Recommend markdown structure for long unstructured documentation</is>
|
|
23
|
+
|
|
24
|
+
<documentation>Long block-level documentation should use markdown headings, lists, or blank-line
|
|
25
|
+
paragraphs instead of a single run-on text block.</documentation>
|
|
26
|
+
|
|
27
|
+
<properties>
|
|
28
|
+
<code override="true">
|
|
29
|
+
<value>BML_STYLE_PREFER_MARKDOWN</value>
|
|
30
|
+
</code>
|
|
31
|
+
<severity override="true">
|
|
32
|
+
<value>recommendation</value>
|
|
33
|
+
</severity>
|
|
34
|
+
<appliesTo override="true">
|
|
35
|
+
<value>block documentation</value>
|
|
36
|
+
</appliesTo>
|
|
37
|
+
<message override="true">
|
|
38
|
+
<value>Structure long documentation with markdown (headings, lists, or paragraphs).</value>
|
|
39
|
+
</message>
|
|
40
|
+
</properties>
|
|
41
|
+
|
|
42
|
+
<aggregations>
|
|
43
|
+
<check>
|
|
44
|
+
<composition>
|
|
45
|
+
<valstyle:PreferMarkdownStructure />
|
|
46
|
+
</composition>
|
|
47
|
+
</check>
|
|
48
|
+
</aggregations>
|
|
49
|
+
|
|
50
|
+
</block>
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BomDocument, Diagnostic, DiagnosticSeverity } from "@blockml/bom";
|
|
2
|
+
export interface StyleRuleRecord {
|
|
3
|
+
name: string;
|
|
4
|
+
code: string;
|
|
5
|
+
severity: DiagnosticSeverity;
|
|
6
|
+
message: string;
|
|
7
|
+
check: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function validateStyle(document: BomDocument): Diagnostic[];
|
|
10
|
+
//# sourceMappingURL=validate-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-style.d.ts","sourceRoot":"","sources":["../src/validate-style.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,kBAAkB,EAGnB,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AA2KD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,UAAU,EAAE,CAmBjE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const MARKDOWN_MIN_LENGTH = 280;
|
|
5
|
+
const FALLBACK_RULES = [
|
|
6
|
+
{
|
|
7
|
+
name: "CDataWhenEscaping",
|
|
8
|
+
code: "BML_STYLE_PREFER_CDATA",
|
|
9
|
+
severity: "recommendation",
|
|
10
|
+
message: "Use CDATA instead of XML entity escaping in documentation.",
|
|
11
|
+
check: "PreferCDataWhenNeedsEscape",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: "MarkdownStructure",
|
|
15
|
+
code: "BML_STYLE_PREFER_MARKDOWN",
|
|
16
|
+
severity: "recommendation",
|
|
17
|
+
message: "Structure long documentation with markdown (headings, lists, or paragraphs).",
|
|
18
|
+
check: "PreferMarkdownStructure",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "EmptyElementSelfClosing",
|
|
22
|
+
code: "BML_STYLE_EMPTY_ELEMENT_SELF_CLOSE",
|
|
23
|
+
severity: "warning",
|
|
24
|
+
message: "Write empty elements as self-closing tags.",
|
|
25
|
+
check: "PreferEmptyElementSelfClosing",
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
function styleRuleDir() {
|
|
29
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
30
|
+
return join(here, "..", "blocks/org/blockml/bml/compiler/validator/style/rule");
|
|
31
|
+
}
|
|
32
|
+
function propertyValue(source, name) {
|
|
33
|
+
const re = new RegExp(`<${name}\\b[\\s\\S]*?<value>([\\s\\S]*?)</value>`);
|
|
34
|
+
return source.match(re)?.[1]?.trim();
|
|
35
|
+
}
|
|
36
|
+
function checkTypeName(source) {
|
|
37
|
+
return source.match(/<check>[\s\S]*?<(?:[\w]+:)?(\w+)\s*\/>/)?.[1];
|
|
38
|
+
}
|
|
39
|
+
let cachedRules;
|
|
40
|
+
function loadStyleCatalog() {
|
|
41
|
+
if (cachedRules) {
|
|
42
|
+
return cachedRules;
|
|
43
|
+
}
|
|
44
|
+
const dir = styleRuleDir();
|
|
45
|
+
if (!existsSync(dir)) {
|
|
46
|
+
cachedRules = FALLBACK_RULES;
|
|
47
|
+
return cachedRules;
|
|
48
|
+
}
|
|
49
|
+
const rules = [];
|
|
50
|
+
for (const entry of readdirSync(dir)) {
|
|
51
|
+
if (!entry.endsWith(".bml")) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const text = readFileSync(join(dir, entry), "utf8");
|
|
55
|
+
const name = text.match(/<name>([^<]+)<\/name>/)?.[1]?.trim();
|
|
56
|
+
const code = propertyValue(text, "code");
|
|
57
|
+
const severity = propertyValue(text, "severity");
|
|
58
|
+
const message = propertyValue(text, "message");
|
|
59
|
+
const check = checkTypeName(text);
|
|
60
|
+
if (!name || !code || !severity || !message || !check) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
rules.push({ name, code, severity, message, check });
|
|
64
|
+
}
|
|
65
|
+
cachedRules = rules.length > 0 ? rules : FALLBACK_RULES;
|
|
66
|
+
return cachedRules;
|
|
67
|
+
}
|
|
68
|
+
function needsCData(text) {
|
|
69
|
+
return /[<&]/.test(text);
|
|
70
|
+
}
|
|
71
|
+
function hasMarkdownStructure(text) {
|
|
72
|
+
return (/\n\s*\n/.test(text) ||
|
|
73
|
+
/^#{1,6} /m.test(text) ||
|
|
74
|
+
/^(\s*[-*] |\s*\d+\. |\s*• )/m.test(text));
|
|
75
|
+
}
|
|
76
|
+
function loc(file, source) {
|
|
77
|
+
return source ?? { file, line: 1, column: 1 };
|
|
78
|
+
}
|
|
79
|
+
function styleDiag(rule, file, source) {
|
|
80
|
+
return {
|
|
81
|
+
severity: rule.severity,
|
|
82
|
+
code: rule.code,
|
|
83
|
+
message: rule.message,
|
|
84
|
+
source: loc(file, source),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function walkBlocks(block, visit) {
|
|
88
|
+
visit(block);
|
|
89
|
+
for (const sub of block.subBlocks) {
|
|
90
|
+
walkBlocks(sub, visit);
|
|
91
|
+
}
|
|
92
|
+
for (const emb of block.embeddedBlocks) {
|
|
93
|
+
walkBlocks(emb, visit);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function collectReferences(block) {
|
|
97
|
+
const refs = [...(block.references ?? [])];
|
|
98
|
+
for (const member of block.members) {
|
|
99
|
+
refs.push(...(member.references ?? []));
|
|
100
|
+
}
|
|
101
|
+
return refs;
|
|
102
|
+
}
|
|
103
|
+
function runPreferCData(rule, block, file, out) {
|
|
104
|
+
for (const prose of block.documentations ?? []) {
|
|
105
|
+
if (needsCData(prose.text) && prose.authoredCharacterDataForm !== "cdata") {
|
|
106
|
+
out.push(styleDiag(rule, file, prose.source));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function runPreferMarkdown(rule, block, file, out) {
|
|
111
|
+
for (const prose of block.documentations ?? []) {
|
|
112
|
+
if (prose.text.length > MARKDOWN_MIN_LENGTH && !hasMarkdownStructure(prose.text)) {
|
|
113
|
+
out.push(styleDiag(rule, file, prose.source));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function runPreferSelfClosing(rule, block, file, out) {
|
|
118
|
+
for (const ref of collectReferences(block)) {
|
|
119
|
+
if (ref.context.trim() === "" && ref.authoredEmptyElementForm === "paired") {
|
|
120
|
+
out.push(styleDiag(rule, file, ref.source));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const INTERPRETERS = {
|
|
125
|
+
PreferCDataWhenNeedsEscape: runPreferCData,
|
|
126
|
+
PreferMarkdownStructure: runPreferMarkdown,
|
|
127
|
+
PreferEmptyElementSelfClosing: runPreferSelfClosing,
|
|
128
|
+
};
|
|
129
|
+
export function validateStyle(document) {
|
|
130
|
+
const file = document.source.filePath;
|
|
131
|
+
const diagnostics = [];
|
|
132
|
+
for (const rule of loadStyleCatalog()) {
|
|
133
|
+
const run = INTERPRETERS[rule.check];
|
|
134
|
+
if (!run) {
|
|
135
|
+
diagnostics.push({
|
|
136
|
+
severity: "info",
|
|
137
|
+
code: "BML_STYLE_UNKNOWN_CHECK",
|
|
138
|
+
message: `Unknown style check type: ${rule.check}`,
|
|
139
|
+
source: { file, line: 1, column: 1 },
|
|
140
|
+
});
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
walkBlocks(document.block, (block) => {
|
|
144
|
+
run(rule, block, file, diagnostics);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return diagnostics;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=validate-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-style.js","sourceRoot":"","sources":["../src/validate-style.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAc,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAc,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgC7F,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,GAAE,eAAoB,GAC5B,cAAc,CA6ChB"}
|
package/dist/validate.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { validateStyle } from "./validate-style.js";
|
|
1
2
|
import { bootstrapTypeRegistry, forkBom, validateConstraints, validateEmbeddedBlocks, validateInstances, validatePresets, validateReadOnly, validateTypes, validateVersions, validateVisibility, TypeRegistry, } from "@blockml/framework";
|
|
2
3
|
/** Bootstrap scan diagnostics apply to the corpus, not the document under validation. */
|
|
3
4
|
function libraryBootstrapDiagnostics(bootstrap, options) {
|
|
@@ -37,6 +38,7 @@ export function validate(document, options = {}) {
|
|
|
37
38
|
...validateVisibility(pragmaticModel, registry),
|
|
38
39
|
...validateReadOnly(pragmaticModel, registry),
|
|
39
40
|
...validateConstraints(pragmaticModel, registry),
|
|
41
|
+
...validateStyle(pragmaticModel),
|
|
40
42
|
];
|
|
41
43
|
const success = !diagnostics.some((d) => d.severity === "error");
|
|
42
44
|
if (!continueOnError && !success) {
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAE5B,yFAAyF;AACzF,SAAS,2BAA2B,CAClC,SAA0B,EAC1B,OAAwB;IAExB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,2BAA2B;QACtC,CAAC,CAAC,IAAI,KAAK,+BAA+B,CAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,QAAqB,EACrB,UAA2B,EAAE;IAE7B,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAC;IAC1D,IAAI,QAAsB,CAAC;IAC3B,IAAI,oBAAoB,GAAiB,EAAE,CAAC;IAE5C,IAAI,OAAO,CAAC,YAAY,YAAY,YAAY,EAAE,CAAC;QACjD,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,gBAAgB,GAIlB,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,gBAAgB,CAAC,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,gBAAgB,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACvD,CAAC;QACD,MAAM,SAAS,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QAC1D,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAC9B,oBAAoB,GAAG,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG;QAClB,GAAG,oBAAoB;QACvB,GAAG,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC1C,GAAG,sBAAsB,CAAC,cAAc,CAAC;QACzC,GAAG,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC7C,GAAG,iBAAiB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC9C,GAAG,eAAe,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC5C,GAAG,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC/C,GAAG,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC7C,GAAG,mBAAmB,CAAC,cAAc,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAE5B,yFAAyF;AACzF,SAAS,2BAA2B,CAClC,SAA0B,EAC1B,OAAwB;IAExB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,2BAA2B;QACtC,CAAC,CAAC,IAAI,KAAK,+BAA+B,CAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,QAAqB,EACrB,UAA2B,EAAE;IAE7B,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAC;IAC1D,IAAI,QAAsB,CAAC;IAC3B,IAAI,oBAAoB,GAAiB,EAAE,CAAC;IAE5C,IAAI,OAAO,CAAC,YAAY,YAAY,YAAY,EAAE,CAAC;QACjD,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,gBAAgB,GAIlB,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,gBAAgB,CAAC,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,gBAAgB,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACvD,CAAC;QACD,MAAM,SAAS,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QAC1D,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAC9B,oBAAoB,GAAG,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG;QAClB,GAAG,oBAAoB;QACvB,GAAG,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC1C,GAAG,sBAAsB,CAAC,cAAc,CAAC;QACzC,GAAG,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC7C,GAAG,iBAAiB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC9C,GAAG,eAAe,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC5C,GAAG,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC/C,GAAG,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC7C,GAAG,mBAAmB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAChD,GAAG,aAAa,CAAC,cAAc,CAAC;KACjC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAEjE,IAAI,CAAC,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blockml/validator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "BlockML validator — semantic validation of BOM documents",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"test": "vitest run packages/validator/test"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@blockml/bom": "^0.
|
|
36
|
-
"@blockml/core": "^1.0.
|
|
37
|
-
"@blockml/framework": "^0.
|
|
35
|
+
"@blockml/bom": "^0.9.0",
|
|
36
|
+
"@blockml/core": "^1.0.9",
|
|
37
|
+
"@blockml/framework": "^0.9.0"
|
|
38
38
|
},
|
|
39
39
|
"engines": {
|
|
40
40
|
"node": ">=20"
|