diff --git a/frog-runner.jar b/frog-runner.jar index 4ed481d..e9a721b 100644 Binary files a/frog-runner.jar and b/frog-runner.jar differ diff --git a/src/extension.ts b/src/extension.ts index 5a773ee..861d49a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,15 +3,22 @@ // Import the module and reference it with the alias vscode in your code below import * as vscode from 'vscode'; import { ConnectionProvider, ConnectionNode } from './connections' + const { spawn } = require('child_process'); +const extensionName = "frog"; var dbSession = null; + // this method is called when your extension is activated // your extension is activated the very first time the command is executed export function activate(context: vscode.ExtensionContext) { const connectionProvider = new ConnectionProvider(); let myOutputChannel = vscode.window.createOutputChannel('SQL Query Results'); + context.subscriptions.push(myOutputChannel); + + let diagnosticCollection = vscode.languages.createDiagnosticCollection(extensionName); + context.subscriptions.push(diagnosticCollection); vscode.window.registerTreeDataProvider('connections', connectionProvider); @@ -25,6 +32,7 @@ export function activate(context: vscode.ExtensionContext) { let disposable = vscode.commands.registerCommand('extension.executeSnippet', () => { // The code you place here will be executed every time your command is executed + let editor = vscode.window.activeTextEditor; if (!editor) return; @@ -47,13 +55,27 @@ export function activate(context: vscode.ExtensionContext) { try { let json = JSON.parse(outputBuffer); + const diagnostics = []; let cd = json['columnDefinitions'] if (!json['rows']) { if (!json['userErrors']) { myOutputChannel.append("SQL executed successfully.\n"); } else { - myOutputChannel.append(JSON.stringify(json, null ,2)); + myOutputChannel.append("Errors found:\n"); + + const document = vscode.window.activeTextEditor.document; + + for (let error of json['userErrors'][0]['lines']) { + let range = document.lineAt(selection.start.line + error['line'] - 1).range; + let diagnostic = new vscode.Diagnostic(range, error['text'], vscode.DiagnosticSeverity.Error); + diagnostic.source = extensionName; + diagnostic.code = "code"; + diagnostics.push(diagnostic); + myOutputChannel.append(error['line'] + ": " + error['text'] + "\n"); + } + + diagnosticCollection.set(document.uri, diagnostics); } } else { for (let row of json["rows"]) { @@ -84,6 +106,7 @@ export function activate(context: vscode.ExtensionContext) { vscode.window.showInformationMessage('No text selected'); return; } + myOutputChannel.append("-- " + new Date() + " -------------------------------\n"); //Executing: '" + text + "'\n"); dbSession.stdin.write(text + "\n--- END ---\n");