Skip to content

Commit 4aee863

Browse files
authored
feat(validator-speclynx): pass deps via toolbox (#206)
Also translate diagnostic data properly from reractor plugins into Jentic diagnostic objects.
1 parent 0360a78 commit 4aee863

File tree

2 files changed

+19
-4
lines changed
  • packages/jentic-openapi-validator-speclynx/src/jentic/apitools/openapi/validator/backends/speclynx

2 files changed

+19
-4
lines changed

packages/jentic-openapi-validator-speclynx/src/jentic/apitools/openapi/validator/backends/speclynx/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,11 @@ def _validate_uri(
220220
code=issue.get("code"),
221221
source="speclynx-validator",
222222
)
223+
issue_data = issue.get("data")
223224
diagnostic.set_target(target)
224-
if "data" in issue and "path" in issue["data"]:
225-
diagnostic.set_path(issue["data"]["path"])
225+
if isinstance(issue_data, dict):
226+
diagnostic.data.update(issue_data) # type: ignore[union-attr]
227+
diagnostic.set_path(issue_data.get("path"))
226228
diagnostics.append(diagnostic)
227229

228230
return ValidationResult(diagnostics=diagnostics)

packages/jentic-openapi-validator-speclynx/src/jentic/apitools/openapi/validator/backends/speclynx/resources/speclynx.mjs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import {readdir, writeFile} from 'node:fs/promises';
44
import path from 'node:path';
55
import {pathToFileURL, fileURLToPath} from 'node:url';
66
import {Command} from 'commander';
7+
import * as vscodeLanguageServerTypes from 'vscode-languageserver-types';
78
import {Diagnostic, DiagnosticSeverity, Range} from 'vscode-languageserver-types';
8-
import {dispatchRefractorPlugins} from '@speclynx/apidom-core';
9+
import {dispatchRefractorPlugins, createToolbox as createToolboxBase} from '@speclynx/apidom-core';
10+
import * as apidomReference from '@speclynx/apidom-reference';
911
import {parse, options} from '@speclynx/apidom-reference';
1012
import FileResolver from '@speclynx/apidom-reference/resolve/resolvers/file';
1113
import HTTPResolverAxios from '@speclynx/apidom-reference/resolve/resolvers/http-axios';
@@ -133,12 +135,23 @@ async function validate(document, cliOptions) {
133135
return {valid: false, diagnostics};
134136
}
135137

138+
// Toolbox creation
139+
const createToolbox = () => ({
140+
deps: {
141+
'vscode-languageserver-types': vscodeLanguageServerTypes,
142+
'@speclynx/apidom-reference': apidomReference,
143+
},
144+
...createToolboxBase()
145+
});
146+
136147
// Run validation plugins
137148
// When parseResult.api exists, traverse it (paths are relative to document root)
138149
// When it doesn't exist (e.g., Swagger 2.0), traverse parseResult so ParseResultElement visitor runs
139150
const elementToTraverse = parseResult.api ?? parseResult;
140151
const dispatchRefractorPluginsAsync = promisify(dispatchRefractorPlugins);
141-
await dispatchRefractorPluginsAsync(elementToTraverse, plugins.map(plugin => plugin({diagnostics})));
152+
await dispatchRefractorPluginsAsync(elementToTraverse, plugins.map(plugin => plugin({diagnostics})), {
153+
toolboxCreator: createToolbox,
154+
});
142155

143156
// Check if there are any errors or warnings
144157
const hasErrors = diagnostics.some(d => d.severity === DiagnosticSeverity.Error);

0 commit comments

Comments
 (0)