mirror of
https://github.com/fluencelabs/aqua-vscode
synced 2025-04-24 16:12:14 +00:00
60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
import type { TextDocument } from 'vscode-languageserver-textdocument';
|
|
import { AquaLSP } from '@fluencelabs/aqua-language-server-api/aqua-lsp-api';
|
|
import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver/node';
|
|
import type { Settings } from './server';
|
|
import type { WorkspaceFolder } from 'vscode-languageserver-protocol';
|
|
|
|
export async function compileAqua(
|
|
settings: Settings,
|
|
textDocument: TextDocument,
|
|
folders: WorkspaceFolder[],
|
|
): Promise<Diagnostic[]> {
|
|
const uri = textDocument.uri.replace('file://', '');
|
|
|
|
let imports: string[] = [];
|
|
|
|
// add all workspace folders to imports
|
|
imports = imports.concat(folders.map((f) => f.uri.replace('file://', '')));
|
|
imports = imports.concat(folders.map((f) => f.uri.replace('file://', '')) + '/node_modules');
|
|
imports = imports.concat(settings.imports.map((s) => s.replace('file://', '')));
|
|
imports = imports.concat(settings.imports.map((s) => s.replace('file://', '')) + '/node_modules');
|
|
if (require.main) {
|
|
imports = imports.concat(require.main.paths);
|
|
}
|
|
|
|
// compile aqua and get possible errors
|
|
const errors = await AquaLSP.compile(uri, imports);
|
|
|
|
const diagnostics: Diagnostic[] = [];
|
|
|
|
if (errors) {
|
|
// Add all errors to Diagnostic
|
|
errors.forEach((err) => {
|
|
const diagnostic: Diagnostic = {
|
|
severity: DiagnosticSeverity.Error,
|
|
range: {
|
|
start: textDocument.positionAt(err.start),
|
|
end: textDocument.positionAt(err.end),
|
|
},
|
|
message: err.message,
|
|
};
|
|
|
|
if (err.location) {
|
|
diagnostic.relatedInformation = [
|
|
{
|
|
location: {
|
|
uri: err.location,
|
|
range: Object.assign({}, diagnostic.range),
|
|
},
|
|
message: 'Compilation error',
|
|
},
|
|
];
|
|
}
|
|
|
|
diagnostics.push(diagnostic);
|
|
});
|
|
}
|
|
|
|
return diagnostics;
|
|
}
|