diff --git a/package-lock.json b/package-lock.json index e96000ae2..f0fcc6c23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Go", - "version": "0.9.2", + "version": "0.10.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/goSignature.ts b/src/goSignature.ts index 3df17e869..bfb83bc95 100755 --- a/src/goSignature.ts +++ b/src/goSignature.ts @@ -8,7 +8,7 @@ import vscode = require('vscode'); import { SignatureHelpProvider, SignatureHelp, SignatureInformation, ParameterInformation, TextDocument, Position, CancellationToken, WorkspaceConfiguration } from 'vscode'; import { definitionLocation } from './goDeclaration'; -import { getParametersAndReturnType, isPositionInString } from './util'; +import { getParametersAndReturnType, isPositionInString, isPositionInComment } from './util'; export class GoSignatureHelpProvider implements SignatureHelpProvider { @@ -94,12 +94,18 @@ export class GoSignatureHelpProvider implements SignatureHelpProvider { for (let lineNr = position.line; lineNr >= 0 && maxLookupLines >= 0; lineNr-- , maxLookupLines--) { const line = document.lineAt(lineNr); + + // Stop processing if we're inside a comment + if (isPositionInComment(document, position)) { + return null; + } + // if its current line, get the text until the position given, otherwise get the full line. const [currentLine, characterPosition] = lineNr === position.line ? [line.text.substring(0, position.character), position.character] : [line.text, line.text.length - 1]; - for (let char = characterPosition - 1; char >= 0; char--) { + for (let char = characterPosition; char >= 0; char--) { switch (currentLine[char]) { case '(': parenBalance--; diff --git a/src/goSuggest.ts b/src/goSuggest.ts index a12c08ceb..0594365ca 100644 --- a/src/goSuggest.ts +++ b/src/goSuggest.ts @@ -8,7 +8,7 @@ import path = require('path'); import vscode = require('vscode'); import cp = require('child_process'); -import { getCurrentGoPath, getBinPath, getParametersAndReturnType, parseFilePrelude, isPositionInString, goKeywords, getToolsEnvVars, guessPackageNameFromFile, goBuiltinTypes, byteOffsetAt, runGodoc } from './util'; +import { getCurrentGoPath, getBinPath, getParametersAndReturnType, parseFilePrelude, isPositionInString, goKeywords, getToolsEnvVars, guessPackageNameFromFile, goBuiltinTypes, byteOffsetAt, runGodoc, isPositionInComment } from './util'; import { getCurrentGoWorkspaceFromGOPATH } from './goPath'; import { promptForMissingTool, promptForUpdatingTool } from './goInstallTools'; import { getTextEditForAddImport } from './goImport'; @@ -497,21 +497,6 @@ function getCommentCompletion(document: vscode.TextDocument, position: vscode.Po } } -function isPositionInComment(document: vscode.TextDocument, position: vscode.Position): boolean { - const lineText = document.lineAt(position.line).text; - - // prevent completion when typing in a line comment that doesnt start from the beginning of the line - const commentIndex = lineText.indexOf('//'); - - if (commentIndex >= 0 && position.character > commentIndex) { - const commentPosition = new vscode.Position(position.line, commentIndex); - const isCommentInString = isPositionInString(document, commentPosition); - - return !isCommentInString; - } - return false; -} - function getCurrentWord(document: vscode.TextDocument, position: vscode.Position): string { // get current word const wordAtPosition = document.getWordRangeAtPosition(position); diff --git a/src/util.ts b/src/util.ts index 186a177ca..e3a83d9cb 100644 --- a/src/util.ts +++ b/src/util.ts @@ -954,3 +954,21 @@ export function runGodoc(cwd: string, packagePath: string, receiver: string, sym }); }); } + +/** + * Returns a boolean whether the current position lies within a comment or not + * @param document + * @param position + */ +export function isPositionInComment(document: vscode.TextDocument, position: vscode.Position): boolean { + const lineText = document.lineAt(position.line).text; + const commentIndex = lineText.indexOf('//'); + + if (commentIndex >= 0 && position.character > commentIndex) { + const commentPosition = new vscode.Position(position.line, commentIndex); + const isCommentInString = isPositionInString(document, commentPosition); + + return !isCommentInString; + } + return false; +}