Skip to content

Commit

Permalink
fix: Prevent self signature
Browse files Browse the repository at this point in the history
  • Loading branch information
famoser committed Feb 12, 2024
1 parent 1243313 commit 9b16e28
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
5 changes: 5 additions & 0 deletions server/src/signature_help.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ export const getSignatureHelp = async (identifier: TextDocumentIdentifier, posit
return undefined;
}

// prevent self to show help
if (definitionSymbol.symbol.node.symbol === signaturePosition.signatureToken) {
return undefined;
}

const {parameters, signatureLabel} = createOffsetLabels(definitionSymbol);

const signature: SignatureInformation = {label: signatureLabel, parameters};
Expand Down
16 changes: 14 additions & 2 deletions server/tests/signature_help.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ import {getSignatureHelp} from "../src/signature_help";
import {number} from "vscode-languageserver/lib/common/utils/is";

describe('signature help', function () {
const assertSignatureDefinitionFound = async (code: string, signatureInvoked: Position, definitionLabel: string, parameters: string[], activeParameter: number) => {
const getSignatureHelpFrom = async (code: string, signatureInvoked: Position) => {
const uri = 'main.pv';

const documentManager = new MockDocumentManager();
documentManager.parse(uri, code);
const signatureHelp = await getSignatureHelp({uri}, signatureInvoked, documentManager);
return await getSignatureHelp({uri}, signatureInvoked, documentManager);
}

const assertSignatureDefinitionFound = async (code: string, signatureInvoked: Position, definitionLabel: string, parameters: string[], activeParameter: number) => {
const signatureHelp = await getSignatureHelpFrom(code, signatureInvoked)

assert.isDefined(signatureHelp);
if (!signatureHelp) {
Expand Down Expand Up @@ -69,4 +73,12 @@ describe('signature help', function () {

await assertSignatureDefinitionFound(code, signatureInvoked, 'hash', ['nat'], 0);
});

it("finds not self", async () => {
const code = `let P(arg: nat) = 0.\nprocess 0`;
const signatureInvoked = {line: 0, character: 6};

const signatureHelp = await getSignatureHelpFrom(code, signatureInvoked);
should().equal(signatureHelp, undefined)
});
});

0 comments on commit 9b16e28

Please sign in to comment.