Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 1x 4x 4x 1x 1x 3x 3x 3x 3x 1x 1x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import * as vscode from 'vscode';
import { container } from 'tsyringe';
import { TurtleParser, TurtleReader } from '@faubulous/mentor-rdf-parsers';
import { QuadContextSerializer, TurtleSerializer } from '@faubulous/mentor-rdf-serializers';
import { ServiceToken } from '@src/services/tokens';
import { IDocumentContextService } from '@src/services/document';
import { WorkspaceUri } from '@src/providers/workspace-uri';
import { TurtleDocument } from '@src/languages';
export const inlineBlankNodes = {
id: 'mentor.command.inlineBlankNodes',
handler: async (documentUri?: vscode.Uri) => {
documentUri = documentUri ?? vscode.window.activeTextEditor?.document.uri;
if (!documentUri) {
vscode.window.showErrorMessage('Invalid document URI.');
return;
}
const targetUri = WorkspaceUri.toCanonicalString(documentUri);
const contextService = container.resolve<IDocumentContextService>(ServiceToken.DocumentContextService);
const context = contextService.contexts[targetUri] as TurtleDocument | undefined;
if (!context) {
vscode.window.showErrorMessage('The document context could not be retrieved.');
return;
}
Iif (!(context instanceof TurtleDocument)) {
vscode.window.showErrorMessage('Unsupported language for inlining blank nodes.');
return;
}
const document = context.getTextDocument();
Iif (!document) {
vscode.window.showErrorMessage('The document could not be retrieved from the context.');
return;
}
const diagnostics = vscode.languages.getDiagnostics(document.uri);
const hasErrors = diagnostics.some((d) => d.severity === vscode.DiagnosticSeverity.Error);
if (hasErrors) {
await vscode.window.showErrorMessage('This document has syntax errors and cannot be refactored.');
return;
}
try {
const cst = new TurtleParser().parse(context.tokens);
const reader = new TurtleReader();
const quadContexts = reader.readQuadContexts(cst, context.tokens);
const serializer = new TurtleSerializer();
const output = serializer.serialize(quadContexts, {
prefixes: context.namespaces,
baseIri: context.baseIri,
inlineSingleUseBlankNodes: true,
});
const fullRange = new vscode.Range(
document.positionAt(0),
document.positionAt(document.getText().length)
);
const edit = new vscode.WorkspaceEdit();
edit.replace(document.uri, fullRange, output);
await vscode.workspace.applyEdit(edit);
} catch (error) {
vscode.window.showErrorMessage(`Error inlining blank nodes: ${error}`);
}
}
};
|