Skip to content

Commit 9a49f9e

Browse files
authored
fix(ls): use spec compliant JSON Pointer implementation (#4887)
Refs #4870
1 parent fa86ec4 commit 9a49f9e

File tree

4 files changed

+16
-10
lines changed

4 files changed

+16
-10
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import {
99
} from 'vscode-languageserver-types';
1010
import { TextDocument } from 'vscode-languageserver-textdocument';
1111
import { SemanticTokensLegend } from 'vscode-languageserver-protocol';
12-
import { ParseResultElement } from '@swagger-api/apidom-core';
13-
import { evaluate } from '@swagger-api/apidom-json-pointer';
12+
import { Element, ParseResultElement } from '@swagger-api/apidom-core';
13+
import { evaluate } from '@swagger-api/apidom-json-pointer/modern';
1414

1515
import {
1616
ColorsContext,
@@ -152,7 +152,7 @@ export default function getLanguageService(context: LanguageServiceContext): Lan
152152
// no API document has been parsed
153153
if (api === undefined) return null;
154154
try {
155-
const jsonPointerResult = evaluate(path, api);
155+
const jsonPointerResult = evaluate<Element>(api, path);
156156
const sm = getSourceMap(jsonPointerResult);
157157
return {
158158
line: sm.line,

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import {
88
} from '@swagger-api/apidom-core';
99
import { Location, Range } from 'vscode-languageserver-types';
1010
import { DefinitionParams, ReferenceParams } from 'vscode-languageserver-protocol';
11-
import { evaluate as jsonPointerEvaluate } from '@swagger-api/apidom-json-pointer';
11+
import {
12+
evaluate as jsonPointerEvaluate,
13+
URIFragmentIdentifier,
14+
} from '@swagger-api/apidom-json-pointer/modern';
1215
import { dereferenceApiDOM } from '@swagger-api/apidom-reference';
1316

1417
import { LanguageSettings } from '../../apidom-language-types.ts';
@@ -129,7 +132,7 @@ export class DefaultDefinitionService implements DefinitionService {
129132
}
130133
}
131134
// TODO ([email protected]): replace with fragment deref
132-
const refTarget = jsonPointerEvaluate(ref.substring(1, ref.length), api);
135+
const refTarget = jsonPointerEvaluate<Element>(api, URIFragmentIdentifier.from(ref));
133136
const nodeSourceMap = getSourceMap(refTarget);
134137
const range = Range.create(
135138
textDocument.positionAt(nodeSourceMap.offset),
@@ -177,7 +180,7 @@ export class DefaultDefinitionService implements DefinitionService {
177180
return null;
178181
}
179182
// TODO ([email protected]): replace with fragment deref
180-
const refTarget = jsonPointerEvaluate(ref.substring(1, ref.length), api);
183+
const refTarget = jsonPointerEvaluate<Element>(api, URIFragmentIdentifier.from(ref));
181184
const nodeSourceMap = getSourceMap(refTarget);
182185
const range = Range.create(
183186
textDocument.positionAt(nodeSourceMap.offset),

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import {
99
} from '@swagger-api/apidom-core';
1010
import { MarkupContent, Position, Range } from 'vscode-languageserver-types';
1111
import { dereferenceApiDOM } from '@swagger-api/apidom-reference';
12-
import { evaluate as jsonPointerEvaluate } from '@swagger-api/apidom-json-pointer';
12+
import {
13+
evaluate as jsonPointerEvaluate,
14+
URIFragmentIdentifier,
15+
} from '@swagger-api/apidom-json-pointer/modern';
1316

1417
import {
1518
HoverProvider,
@@ -221,7 +224,7 @@ export class DefaultHoverService implements HoverService {
221224
} else {
222225
try {
223226
// TODO ([email protected]): replace with fragment deref
224-
const refTarget = jsonPointerEvaluate(ref.substring(1, ref.length), api);
227+
const refTarget = jsonPointerEvaluate<Element>(api, URIFragmentIdentifier.from(ref));
225228
const nodeSourceMap = getSourceMap(refTarget);
226229

227230
const linePosition = textDocument.positionAt(nodeSourceMap.offset);

packages/apidom-ls/src/utils/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
traverse,
3030
toValue,
3131
} from '@swagger-api/apidom-core';
32-
import { compile } from '@swagger-api/apidom-json-pointer';
32+
import { compile, URIFragmentIdentifier } from '@swagger-api/apidom-json-pointer/modern';
3333
import { TextDocument } from 'vscode-languageserver-textdocument';
3434
import { Range } from 'vscode-languageserver-types';
3535

@@ -189,7 +189,7 @@ export function logJson(label: string, message: unknown): void {
189189

190190
export function buildJsonPointer(path: string[]): string {
191191
const jsonPointer = compile(path);
192-
return `#${jsonPointer}`;
192+
return URIFragmentIdentifier.to(jsonPointer);
193193
}
194194

195195
interface FoundNode {

0 commit comments

Comments
 (0)