Fix to display errors at the call site (#6991)
This commit is contained in:
@ -1467,7 +1467,6 @@ impl Node<CallExpressionKw> {
|
|||||||
.await
|
.await
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
// Add the call expression to the source ranges.
|
// Add the call expression to the source ranges.
|
||||||
// TODO currently ignored by the frontend
|
|
||||||
e.add_source_ranges(vec![callsite])
|
e.add_source_ranges(vec![callsite])
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ import {
|
|||||||
UNLABELED_ARG,
|
UNLABELED_ARG,
|
||||||
} from '@src/lang/queryAstConstants'
|
} from '@src/lang/queryAstConstants'
|
||||||
import type { NumericType } from '@rust/kcl-lib/bindings/NumericType'
|
import type { NumericType } from '@rust/kcl-lib/bindings/NumericType'
|
||||||
|
import { isTopLevelModule } from '@src/lang/util'
|
||||||
|
|
||||||
export type { ArrayExpression } from '@rust/kcl-lib/bindings/ArrayExpression'
|
export type { ArrayExpression } from '@rust/kcl-lib/bindings/ArrayExpression'
|
||||||
export type {
|
export type {
|
||||||
@ -157,10 +158,23 @@ export function defaultSourceRange(): SourceRange {
|
|||||||
return [0, 0, 0]
|
return [0, 0, 0]
|
||||||
}
|
}
|
||||||
|
|
||||||
function firstSourceRange(error: RustKclError): SourceRange {
|
function bestSourceRange(error: RustKclError): SourceRange {
|
||||||
return error.sourceRanges.length > 0
|
if (error.sourceRanges.length === 0) {
|
||||||
? sourceRangeFromRust(error.sourceRanges[0])
|
return defaultSourceRange()
|
||||||
: defaultSourceRange()
|
}
|
||||||
|
|
||||||
|
// When there's an error, the call stack is unwound, and the locations are
|
||||||
|
// built up from deepest location to shallowest. So the shallowest call is
|
||||||
|
// last. That's the most useful to the user.
|
||||||
|
for (let i = error.sourceRanges.length - 1; i >= 0; i--) {
|
||||||
|
const range = error.sourceRanges[i]
|
||||||
|
// Skip ranges pointing into files that aren't the top-level module.
|
||||||
|
if (isTopLevelModule(range)) {
|
||||||
|
return sourceRangeFromRust(range)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// We didn't find a top-level module range, so just use the last one.
|
||||||
|
return sourceRangeFromRust(error.sourceRanges[error.sourceRanges.length - 1])
|
||||||
}
|
}
|
||||||
|
|
||||||
const splitErrors = (
|
const splitErrors = (
|
||||||
@ -230,7 +244,7 @@ export const parse = (code: string | Error): ParseResult | Error => {
|
|||||||
return new KCLError(
|
return new KCLError(
|
||||||
parsed.kind,
|
parsed.kind,
|
||||||
parsed.msg,
|
parsed.msg,
|
||||||
firstSourceRange(parsed),
|
bestSourceRange(parsed),
|
||||||
[],
|
[],
|
||||||
[],
|
[],
|
||||||
defaultArtifactGraph(),
|
defaultArtifactGraph(),
|
||||||
@ -386,7 +400,7 @@ export const errFromErrWithOutputs = (e: any): KCLError => {
|
|||||||
return new KCLError(
|
return new KCLError(
|
||||||
parsed.error.kind,
|
parsed.error.kind,
|
||||||
parsed.error.msg,
|
parsed.error.msg,
|
||||||
firstSourceRange(parsed.error),
|
bestSourceRange(parsed.error),
|
||||||
parsed.operations,
|
parsed.operations,
|
||||||
parsed.artifactCommands,
|
parsed.artifactCommands,
|
||||||
rustArtifactGraphToMap(parsed.artifactGraph),
|
rustArtifactGraphToMap(parsed.artifactGraph),
|
||||||
|
Reference in New Issue
Block a user