Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions protocol/cli.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
* Types that represent CLI command results and errors
*/

export type Position = [number, number, number, number];

export interface LintError {
id: string;
message: string;
description?: string | null;
path: string;
schemaLocation: string;
position: [number, number, number, number] | null;
position: Position | null;
}

export interface LintResult {
Expand All @@ -30,7 +32,7 @@ export interface MetaschemaError {
instanceLocation: string;
keywordLocation: string;
absoluteKeywordLocation?: string;
instancePosition?: [number, number, number, number];
instancePosition?: Position;
}

export interface CliError {
Expand Down
4 changes: 3 additions & 1 deletion protocol/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*/

import type {
Position,
LintResult,
FormatResult,
MetaschemaResult
Expand All @@ -24,6 +25,7 @@ export interface FileInfo {
}

export type {
Position,
LintError,
LintResult,
CommandResult,
Expand Down Expand Up @@ -51,7 +53,7 @@ export type WebviewCommand = 'goToPosition' | 'formatSchema' | 'openExternal';

export interface WebviewToExtensionMessage {
command: WebviewCommand;
position?: [number, number, number, number];
position?: Position;
url?: string;
}

Expand Down
11 changes: 5 additions & 6 deletions vscode/src/diagnostics/DiagnosticManager.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as vscode from 'vscode';
import { DiagnosticType } from '../types';
import { LintError, CliError, MetaschemaError } from '../../../protocol/types';
import { LintError, CliError, MetaschemaError, Position } from '../../../protocol/types';
import { errorPositionToRange } from '../utils/fileUtils';

/**
Expand All @@ -24,8 +24,8 @@ export class DiagnosticManager {
type: DiagnosticType
): void {
const diagnostics = errors
.filter((error): error is LintError & { position: [number, number, number, number] } =>
error.position !== null) // Skip errors without positions for YAML files
.filter((error): error is LintError & { position: Position } =>
error.position !== null)
.map(error => {
const range = errorPositionToRange(error.position);

Expand Down Expand Up @@ -103,12 +103,11 @@ export class DiagnosticManager {
}

const diagnostics = errors
.filter((error): error is MetaschemaError => {
.filter((error): error is MetaschemaError & { instancePosition: Position } => {
return 'instancePosition' in error && error.instancePosition !== undefined;
})
.map(error => {
const position = error.instancePosition as [number, number, number, number];
const range = errorPositionToRange(position);
const range = errorPositionToRange(error.instancePosition);

const diagnostic = new vscode.Diagnostic(
range,
Expand Down
14 changes: 7 additions & 7 deletions vscode/src/utils/fileUtils.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as path from 'path';
import * as vscode from 'vscode';
import * as fs from 'fs';
import { FileInfo, LintResult, MetaschemaResult, CliError } from '../../../protocol/types';
import { FileInfo, LintResult, MetaschemaResult, CliError, Position } from '../../../protocol/types';

/**
* Parse generic CLI error response from JSON output
Expand Down Expand Up @@ -208,12 +208,12 @@ export function parseMetaschemaResult(output: string, exitCode: number | null):

const parsed = JSON.parse(jsonStr);
if (Array.isArray(parsed)) {
result.errors = parsed.map((error: {
error?: string;
instanceLocation?: string;
keywordLocation?: string;
result.errors = parsed.map((error: {
error?: string;
instanceLocation?: string;
keywordLocation?: string;
absoluteKeywordLocation?: string;
instancePosition?: [number, number, number, number];
instancePosition?: Position;
}) => ({
error: error.error || 'Validation error',
instanceLocation: error.instanceLocation || '',
Expand Down Expand Up @@ -260,7 +260,7 @@ export function arrayToPosition(arr: [number, number]): vscode.Position {
* Convert error position array to VS Code range
* Position array is 1-based and inclusive, VS Code is 0-based and end-exclusive
*/
export function errorPositionToRange(position: [number, number, number, number]): vscode.Range {
export function errorPositionToRange(position: Position): vscode.Range {
const [lineStart, columnStart, lineEnd, columnEnd] = position;
return new vscode.Range(
new vscode.Position(lineStart - 1, columnStart - 1),
Expand Down
4 changes: 2 additions & 2 deletions webview/src/components/LintTab.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { LintResult } from '../../../protocol/types';
import type { LintResult, Position } from '../../../protocol/types';
import { vscode } from '../vscode-api';
import { RawOutput } from './RawOutput';
import { CheckCircle, AlertCircle, FileQuestion } from 'lucide-react';
Expand All @@ -10,7 +10,7 @@ export interface LintTabProps {
}

export function LintTab({ lintResult, blocked, noFileSelected }: LintTabProps) {
const handleGoToPosition = (position: [number, number, number, number]) => {
const handleGoToPosition = (position: Position) => {
vscode.goToPosition(position);
};

Expand Down
6 changes: 3 additions & 3 deletions webview/src/components/MetaschemaTab.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { MetaschemaResult, MetaschemaError } from '../../../protocol/types';
import type { MetaschemaResult, MetaschemaError, Position } from '../../../protocol/types';
import { vscode } from '../vscode-api';
import { RawOutput } from './RawOutput';
import { CheckCircle, AlertTriangle, FileQuestion } from 'lucide-react';
Expand All @@ -13,7 +13,7 @@ function isMetaschemaError(error: unknown): error is MetaschemaError {
}

export function MetaschemaTab({ metaschemaResult, noFileSelected }: MetaschemaTabProps) {
const handleGoToPosition = (position: [number, number, number, number]) => {
const handleGoToPosition = (position: Position) => {
vscode.goToPosition(position);
};

Expand Down Expand Up @@ -124,7 +124,7 @@ export function MetaschemaTab({ metaschemaResult, noFileSelected }: MetaschemaTa
} else if (metaschemaResult.exitCode === 1) {
const error = errors.length > 0 ? errors[0] : null;

const errorPosition: [number, number, number, number] | null =
const errorPosition: Position | null =
error && 'instancePosition' in error && error.instancePosition
? error.instancePosition
: null;
Expand Down
4 changes: 2 additions & 2 deletions webview/src/vscode-api.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { TabType, WebviewState, WebviewToExtensionMessage } from '../../protocol/types';
import type { TabType, WebviewState, WebviewToExtensionMessage, Position } from '../../protocol/types';

export type { TabType };

Expand Down Expand Up @@ -29,7 +29,7 @@ class VSCodeAPIWrapper {
this.postMessage({ command: 'formatSchema' });
}

public goToPosition(position: [number, number, number, number]): void {
public goToPosition(position: Position): void {
this.postMessage({ command: 'goToPosition', position });
}

Expand Down