From 124c8848a55fb73e2a2dc75bb842859b6752b96a Mon Sep 17 00:00:00 2001 From: Konstantin Zaitsev Date: Thu, 9 Mar 2017 23:49:12 +0700 Subject: [PATCH] Update handle nimsuggest chk command --- src/nimBuild.ts | 17 ++++++++++++++--- src/nimMain.ts | 9 +++++---- src/nimSuggestExec.ts | 7 ++++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/nimBuild.ts b/src/nimBuild.ts index 49868be..e79a424 100644 --- a/src/nimBuild.ts +++ b/src/nimBuild.ts @@ -11,7 +11,7 @@ import path = require('path'); import os = require('os'); import fs = require('fs'); import { getNimExecPath, getProjectFile, getProjects, isProjectMode } from './nimUtils'; -import { execNimSuggest, NimSuggestType } from './nimSuggestExec'; +import { execNimSuggest, NimSuggestType, NimSuggestResult } from './nimSuggestExec'; export interface ICheckResult { file: string; @@ -119,6 +119,18 @@ function parseErrors(lines: string[]): ICheckResult[] { return ret; } +function parseNimsuggestErrors(items: NimSuggestResult[]): ICheckResult[] { + var ret: ICheckResult[] = []; + for (var i = 0; i < items.length; i++) { + let item = items[i]; + if (item.path === '???' && item.type === 'Hint') { + continue; + } + ret.push({ file: item.path, line: item.line, column: item.column, msg: item.documentation, severity: item.type }); + } + return ret; +} + export function check(filename: string, nimConfig: vscode.WorkspaceConfiguration): Promise { var runningToolsPromises = []; var cwd = path.dirname(filename); @@ -128,8 +140,7 @@ export function check(filename: string, nimConfig: vscode.WorkspaceConfiguration runningToolsPromises.push(new Promise((resolve, reject) => { execNimSuggest(NimSuggestType.chk, filename, 0, 0, '').then(items => { if (items.length > 0) { - let parts = items[0].suggest.replace(/\\,/g, '').replace(/u000D/g, '').replace(/\\/g, '\\').split('u000A'); - resolve(parseErrors(parts)); + resolve(parseNimsuggestErrors(items)); } else { resolve([]); } diff --git a/src/nimMain.ts b/src/nimMain.ts index 42956ff..c877612 100644 --- a/src/nimMain.ts +++ b/src/nimMain.ts @@ -143,7 +143,8 @@ function runCheck(document: vscode.TextDocument) { if (error.msg.indexOf('\'') >= 0) { endColumn += error.msg.lastIndexOf('\'') - error.msg.indexOf('\'') - 2; } - let range = new vscode.Range(error.line - 1, error.column - 1, error.line - 1, endColumn); + let line = Math.max(0, error.line - 1) + let range = new vscode.Range(line, Math.max(0, error.column - 1), line, endColumn); let diagnostic = new vscode.Diagnostic(range, error.msg, mapSeverityToVSCodeSeverity(error.severity)); let diagnostics = diagnosticMap.get(targetUri); if (!diagnostics) { @@ -188,18 +189,18 @@ function runFile() { terminal.show(true); if (editor.document.isUntitled) { terminal.sendText('nim ' + vscode.workspace.getConfiguration('nim')['buildCommand'] + - ' -r "' + getDirtyFile(editor.document)+'"', true); + ' -r "' + getDirtyFile(editor.document) + '"', true); } else { if (editor.document.isDirty) { editor.document.save().then((success: boolean) => { if (success) { terminal.sendText('nim ' + vscode.workspace.getConfiguration('nim')['buildCommand'] + - ' -r "' + editor.document.fileName+'"', true); + ' -r "' + editor.document.fileName + '"', true); } }); } else { terminal.sendText('nim ' + vscode.workspace.getConfiguration('nim')['buildCommand'] + - ' -r "' + editor.document.fileName+'"', true); + ' -r "' + editor.document.fileName + '"', true); } } } diff --git a/src/nimSuggestExec.ts b/src/nimSuggestExec.ts index 95200bd..6bb9dd9 100644 --- a/src/nimSuggestExec.ts +++ b/src/nimSuggestExec.ts @@ -253,10 +253,15 @@ export async function closeNimSuggestProcess(filename: string): Promise { async function getNimSuggestProcess(nimProject: string): Promise { if (!nimSuggestProcessCache[nimProject]) { nimSuggestProcessCache[nimProject] = new Promise((resolve, reject) => { + let nimConfig = vscode.workspace.getConfiguration('nim') var args = ['--epc', '--v2']; - if (!!vscode.workspace.getConfiguration('nim').get('logNimsuggest')) { + if (!!nimConfig['logNimsuggest']) { args.push('--log'); } + if (!!nimConfig['useNimsuggestCheck']) { + args.push('--refresh:on'); + } + args.push(nimProject); let process = cp.spawn(getNimSuggestPath(), args, { cwd: vscode.workspace.rootPath }); process.stdout.once('data', (data) => {