Skip to content

Commit 396312e

Browse files
committed
Fixes to hover support
Signed-off-by: worksofliam <[email protected]>
1 parent 0cdf4e6 commit 396312e

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

src/language/providers/hoverProvider.ts

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,29 @@ export const hoverProvider = languages.registerHoverProvider({ language: `sql` }
8787

8888
if (result) {
8989
if ('routine' in result) {
90-
const routineOffset = ref.tokens[ref.tokens.length-1].range.end-1;
91-
const callableRef = statementAt.getCallableDetail(routineOffset, false);
92-
if (callableRef) {
93-
const { currentCount } = getPositionData(callableRef, routineOffset);
94-
const signatures = await DbCache.getCachedSignatures(callableRef.parentRef.object.schema, callableRef.parentRef.object.name);
95-
const possibleSignatures = signatures.filter((s) => s.parms.length >= currentCount).sort((a, b) => a.parms.length - b.parms.length);
96-
const signature = possibleSignatures.find((signature) => currentCount <= signature.parms.length);
97-
if (signature) {
98-
addRoutineMd(md, signature, result);
99-
}
90+
let signatures: CallableSignature[];
91+
let signature: CallableSignature | undefined;
92+
93+
const lastToken = ref.tokens[ref.tokens.length-1];
94+
95+
if (lastToken.type === `closebracket`) {
96+
let routineOffset: number = lastToken.range.start-1;
97+
const callableRef = statementAt.getCallableDetail(routineOffset, false);
98+
if (callableRef) {
99+
const { currentCount } = getPositionData(callableRef, routineOffset);
100+
signatures = await DbCache.getCachedSignatures(callableRef.parentRef.object.schema, callableRef.parentRef.object.name);
101+
const possibleSignatures = signatures.filter((s) => s.parms.length >= currentCount).sort((a, b) => a.parms.length - b.parms.length);
102+
signature = possibleSignatures.find((signature) => currentCount <= signature.parms.length);
103+
}
104+
}
105+
106+
if (!signature) {
107+
signatures = await DbCache.getCachedSignatures(result.routine.schema, result.routine.name);
108+
signature = signatures[0];
109+
}
110+
111+
if (signature) {
112+
addRoutineMd(md, signature, result);
100113
}
101114
} else {
102115
addSymbol(md, result);

src/language/sql/statement.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ export default class Statement {
378378
switch (this.type) {
379379
case StatementType.Call:
380380
// CALL X()
381-
doAdd(this.getRefAtToken(1));
381+
doAdd(this.getRefAtToken(1, {includeParameters: true}));
382382
break;
383383

384384
case StatementType.Alter:
@@ -615,6 +615,18 @@ export default class Statement {
615615

616616
if (!isSubSelect && !sqlObj.isUDTF) {
617617
sqlObj.tokens = this.tokens.slice(i, endIndex+1);
618+
619+
if (options.includeParameters && tokenIs(this.tokens[endIndex+1], `openbracket`)) {
620+
const blockTokens = this.getBlockAt(this.tokens[endIndex+1].range.end+1);
621+
622+
if (blockTokens.length > 0) {
623+
sqlObj.tokens = sqlObj.tokens.concat([
624+
{type: `openbracket`, value: `(`, range: {start: this.tokens[endIndex+1].range.start, end: this.tokens[endIndex+1].range.end}},
625+
...blockTokens,
626+
{type: `closebracket`, value: `)`, range: {start: blockTokens[blockTokens.length-1].range.end, end: blockTokens[blockTokens.length-1].range.end}}
627+
]);
628+
}
629+
}
618630
}
619631

620632
if (options.withSystemName) {

0 commit comments

Comments
 (0)