Roo-Code/packages/vscode-shim/src/classes/Additional.ts
Chris Estreich b11d53adf4
VSCode shim + basic cli (#10452)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-05 10:24:05 -08:00

181 lines
4.8 KiB
TypeScript

/**
* Additional VSCode API classes for extension support
*
* This file contains supplementary classes and types that extensions may need.
*/
import { Range } from "./Range.js"
import type { IUri, IRange, IPosition, DiagnosticSeverity, DiagnosticTag } from "../types.js"
/**
* Represents a location in source code (URI + Range or Position)
*/
export class Location {
constructor(
public uri: IUri,
public range: IRange | IPosition,
) {}
}
/**
* Related diagnostic information
*/
export class DiagnosticRelatedInformation {
constructor(
public location: Location,
public message: string,
) {}
}
/**
* Represents a diagnostic (error, warning, etc.)
*/
export class Diagnostic {
range: Range
message: string
severity: DiagnosticSeverity
source?: string
code?: string | number | { value: string | number; target: IUri }
relatedInformation?: DiagnosticRelatedInformation[]
tags?: DiagnosticTag[]
constructor(range: IRange, message: string, severity?: DiagnosticSeverity) {
this.range = range as Range
this.message = message
this.severity = severity !== undefined ? severity : 0 // Error
}
}
/**
* Theme color reference
*/
export class ThemeColor {
constructor(public id: string) {}
}
/**
* Theme icon reference
*/
export class ThemeIcon {
constructor(
public id: string,
public color?: ThemeColor,
) {}
}
/**
* Code action kind for categorizing code actions
*/
export class CodeActionKind {
static readonly Empty = new CodeActionKind("")
static readonly QuickFix = new CodeActionKind("quickfix")
static readonly Refactor = new CodeActionKind("refactor")
static readonly RefactorExtract = new CodeActionKind("refactor.extract")
static readonly RefactorInline = new CodeActionKind("refactor.inline")
static readonly RefactorRewrite = new CodeActionKind("refactor.rewrite")
static readonly Source = new CodeActionKind("source")
static readonly SourceOrganizeImports = new CodeActionKind("source.organizeImports")
constructor(public value: string) {}
append(parts: string): CodeActionKind {
return new CodeActionKind(this.value ? `${this.value}.${parts}` : parts)
}
intersects(other: CodeActionKind): boolean {
return this.contains(other) || other.contains(this)
}
contains(other: CodeActionKind): boolean {
return this.value === other.value || other.value.startsWith(this.value + ".")
}
}
/**
* Code lens for displaying inline information
*/
export class CodeLens {
public range: Range
public command?: { command: string; title: string; arguments?: unknown[] } | undefined
public isResolved: boolean = false
constructor(range: IRange, command?: { command: string; title: string; arguments?: unknown[] } | undefined) {
this.range = range as Range
this.command = command
}
}
/**
* Language Model API parts
*/
export class LanguageModelTextPart {
constructor(public value: string) {}
}
export class LanguageModelToolCallPart {
constructor(
public callId: string,
public name: string,
public input: unknown,
) {}
}
export class LanguageModelToolResultPart {
constructor(
public callId: string,
public content: unknown[],
) {}
}
/**
* File system error with specific error codes
*/
export class FileSystemError extends Error {
public code: string
constructor(message: string, code: string = "Unknown") {
super(message)
this.name = "FileSystemError"
this.code = code
}
static FileNotFound(messageOrUri?: string | IUri): FileSystemError {
const message =
typeof messageOrUri === "string" ? messageOrUri : `File not found: ${messageOrUri?.fsPath || "unknown"}`
return new FileSystemError(message, "FileNotFound")
}
static FileExists(messageOrUri?: string | IUri): FileSystemError {
const message =
typeof messageOrUri === "string" ? messageOrUri : `File exists: ${messageOrUri?.fsPath || "unknown"}`
return new FileSystemError(message, "FileExists")
}
static FileNotADirectory(messageOrUri?: string | IUri): FileSystemError {
const message =
typeof messageOrUri === "string"
? messageOrUri
: `File is not a directory: ${messageOrUri?.fsPath || "unknown"}`
return new FileSystemError(message, "FileNotADirectory")
}
static FileIsADirectory(messageOrUri?: string | IUri): FileSystemError {
const message =
typeof messageOrUri === "string"
? messageOrUri
: `File is a directory: ${messageOrUri?.fsPath || "unknown"}`
return new FileSystemError(message, "FileIsADirectory")
}
static NoPermissions(messageOrUri?: string | IUri): FileSystemError {
const message =
typeof messageOrUri === "string" ? messageOrUri : `No permissions: ${messageOrUri?.fsPath || "unknown"}`
return new FileSystemError(message, "NoPermissions")
}
static Unavailable(messageOrUri?: string | IUri): FileSystemError {
const message =
typeof messageOrUri === "string" ? messageOrUri : `Unavailable: ${messageOrUri?.fsPath || "unknown"}`
return new FileSystemError(message, "Unavailable")
}
}