Skip to content

Commit 00f79cb

Browse files
authored
feat(ls): add option to pass down reference options for validation (#5014)
1 parent cfb9b66 commit 00f79cb

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

packages/apidom-ls/src/apidom-language-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export default function getLanguageService(context: LanguageServiceContext): Lan
9595
symbolsContext: context.symbolsContext,
9696
colorsContext: context.colorsContext,
9797
linksContext: context.linksContext,
98+
referenceOptions: context.referenceOptions,
9899
};
99100
configureServices(languageSettings);
100101

packages/apidom-ls/src/apidom-language-types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
ReferenceParams,
2828
} from 'vscode-languageserver-protocol';
2929
import { Element, ParseResultElement } from '@swagger-api/apidom-core';
30+
import { ApiDOMReferenceOptions } from '@swagger-api/apidom-reference';
3031

3132
/**
3233
* @public
@@ -107,6 +108,7 @@ export interface LanguageServiceContext {
107108
colorsContext?: ColorsContext;
108109
linksContext?: LinksContext;
109110
refractorPlugins?: RefractorPlugins;
111+
referenceOptions?: ApiDOMReferenceOptions;
110112
}
111113

112114
/**
@@ -316,6 +318,7 @@ export interface LanguageSettings {
316318
symbolsContext?: SymbolsContext;
317319
colorsContext?: ColorsContext;
318320
linksContext?: LinksContext;
321+
referenceOptions?: ApiDOMReferenceOptions;
319322
}
320323

321324
// export type SeverityLevel = 'error' | 'warning' | 'ignore';

packages/apidom-ls/src/services/validation/validation-service.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ export class DefaultValidationService implements ValidationService {
237237
: 'https://smartbear.com/';
238238
const apiReference = new Reference({ uri: baseURI, value: cloneDeep(result)! });
239239
const cachedParsers = options.parse.parsers.map(DefaultValidationService.createCachedParser);
240+
const { referenceOptions } = this.settings || {};
240241

241242
for (const [fragmentId, refEl] of refElements.entries()) {
242243
const referenceElementReference = new Reference({
@@ -248,14 +249,17 @@ export class DefaultValidationService implements ValidationService {
248249
try {
249250
const promise = dereferenceApiDOM(refEl, {
250251
resolve: {
252+
...(referenceOptions?.resolve ?? {}),
251253
baseURI: `${baseURI}#reference${fragmentId}`,
252254
external: !toValue((refEl as ObjectElement).get('$ref')).startsWith('#'),
253255
},
254256
parse: {
257+
...(referenceOptions?.parse ?? {}),
255258
parsers: cachedParsers,
256259
mediaType: nameSpace.mediaType,
257260
},
258261
dereference: {
262+
...(referenceOptions?.dereference ?? {}),
259263
refSet,
260264
immutable: false,
261265
},
@@ -339,6 +343,7 @@ export class DefaultValidationService implements ValidationService {
339343
: 'https://smartbear.com/';
340344
const apiReference = new Reference({ uri: baseURI, value: cloneDeep(result) });
341345
const cachedParsers = options.parse.parsers.map(DefaultValidationService.createCachedParser);
346+
const { referenceOptions } = this.settings || {};
342347

343348
for (const [fragmentId, refEl] of refElements.entries()) {
344349
const referenceElementReference = new Reference({
@@ -351,14 +356,17 @@ export class DefaultValidationService implements ValidationService {
351356
// eslint-disable-next-line no-await-in-loop
352357
await dereferenceApiDOM(refEl, {
353358
resolve: {
359+
...(referenceOptions?.resolve ?? {}),
354360
baseURI: `${baseURI}#reference${fragmentId}`,
355361
external: !toValue((refEl as ObjectElement).get('$ref')).startsWith('#'),
356362
},
357363
parse: {
364+
...(referenceOptions?.parse ?? {}),
358365
mediaType: nameSpace.mediaType,
359366
parsers: cachedParsers,
360367
},
361368
dereference: {
369+
...(referenceOptions?.dereference ?? {}),
362370
refSet,
363371
immutable: false,
364372
},

0 commit comments

Comments
 (0)