* Updates visualization library.

* Adds support for more js debug adapters.
* Minor improvements.
This commit is contained in:
Henning Dieterichs
2021-06-12 16:02:54 +02:00
parent 6da44bd722
commit 6ce5d666a3
16 changed files with 340 additions and 38 deletions

View File

@@ -0,0 +1,22 @@
import { DataExtractor, DataExtractorContext, ExtractionCollector } from "../..";
export class StringDiffExtractor implements DataExtractor {
public readonly id = "string-diff";
public getExtractions(data: unknown,
collector: ExtractionCollector,
context: DataExtractorContext) {
if (Array.isArray(data) && data.length === 2 && typeof data[0] === "string" && typeof data[1] === "string") {
collector.addExtraction({
id: "string-diff",
name: "String Diff",
priority: 1000,
extractData: () => ({
kind: { text: true },
text: data[0],
otherText: data[1]
})
})
}
}
}

View File

@@ -8,6 +8,8 @@ import { ObjectGraphExtractor } from "./ObjectGraphExtractor";
import { getDataExtractorApi } from "../injection";
import { GridExtractor } from "./GridExtractor";
import { TableDataExtractor } from "./TableExtractor";
import { StringDiffExtractor } from "./StringDiffExtractor";
import { find } from "../../helpers";
/**
* The default data extractors should be registered by VS Code automatically.
@@ -25,7 +27,102 @@ export function registerDefaultExtractors(
new ObjectGraphExtractor(),
new GridExtractor(),
new TableDataExtractor(),
new StringDiffExtractor(),
]) {
api.registerExtractor(item);
}
function isRange(
value: unknown
): value is {
startColumn: number;
startLineNumber: number;
endColumn: number;
endLineNumber: number;
} {
return (
typeof value === "object" &&
!!value &&
"startColumn" in value &&
"startLineNumber" in value
);
}
function isPosition(
value: unknown
): value is { column: number; lineNumber: number } {
return (
typeof value === "object" &&
!!value &&
"column" in value &&
"lineNumber" in value
);
}
// hedietDbgVis.find(x => x.constructor.name === 'TextModel').getValue()
api.registerExtractor({
id: "positionInTextModel",
getExtractions(data, collector, context) {
let range: {
start: {
line: number;
column: number;
};
end: {
line: number;
column: number;
};
};
if (isRange(data)) {
range = {
start: {
line: data.startLineNumber - 1,
column: data.startColumn - 1,
},
end: {
line: data.endLineNumber - 1,
column: data.endColumn - 1,
},
};
} else if (isPosition(data)) {
range = {
start: {
line: data.lineNumber - 1,
column: data.column - 1,
},
end: {
line: data.lineNumber - 1,
column: data.column - 1,
},
};
} else {
return;
}
if (!isRange(data) && !isPosition(data)) {
return;
}
const textModel: any = find(
x =>
typeof x === "object" &&
!!x &&
"constructor" in x &&
(x as any).constructor.name === "TextModel"
);
collector.addExtraction({
id: "positionInTextModel",
name: "Position In TextModel",
extractData() {
return {
kind: { text: true },
text: textModel.getValue(),
decorations: [{ range }],
};
},
priority: 1000,
});
},
});
}