Skip to content

Commit 908d619

Browse files
committed
shim getSignatureAtPosition using the new signature help interfaces
1 parent c72e157 commit 908d619

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

src/services/services.ts

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,8 @@ module ts {
661661
getSignatureHelpItems(fileName: string, position: number): SignatureHelpItems;
662662
getSignatureHelpCurrentArgumentState(fileName: string, position: number, applicableSpanStart: number): SignatureHelpState;
663663

664+
getSignatureAtPosition(fileName: string, position: number): SignatureInfo;
665+
664666
getRenameInfo(fileName: string, position: number): RenameInfo;
665667
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
666668
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
@@ -686,6 +688,42 @@ module ts {
686688
dispose(): void;
687689
}
688690

691+
export interface SignatureInfo {
692+
actual: ActualSignatureInfo;
693+
formal: FormalSignatureItemInfo[]; // Formal signatures
694+
activeFormal: number; // Index of the "best match" formal signature
695+
}
696+
697+
export interface FormalSignatureItemInfo {
698+
signatureInfo: string;
699+
typeParameters: FormalTypeParameterInfo[];
700+
parameters: FormalParameterInfo[]; // Array of parameters
701+
docComment: string; // Help for the signature
702+
}
703+
704+
export interface FormalTypeParameterInfo {
705+
name: string; // Type parameter name
706+
docComment: string; // Comments that contain help for the parameter
707+
minChar: number; // minChar for parameter info in the formal signature info string
708+
limChar: number; // lim char for parameter info in the formal signature info string
709+
}
710+
711+
export interface FormalParameterInfo {
712+
name: string; // Parameter name
713+
isVariable: boolean; // true if parameter is var args
714+
docComment: string; // Comments that contain help for the parameter
715+
minChar: number; // minChar for parameter info in the formal signature info string
716+
limChar: number; // lim char for parameter info in the formal signature info string
717+
}
718+
719+
export interface ActualSignatureInfo {
720+
parameterMinChar: number;
721+
parameterLimChar: number;
722+
currentParameterIsTypeParameter: boolean; // current parameter is a type argument or a normal argument
723+
currentParameter: number; // Index of active parameter in "parameters" or "typeParamters" array
724+
}
725+
726+
689727
export class ClassificationTypeNames {
690728
public static comment = "comment";
691729
public static identifier = "identifier";
@@ -3748,6 +3786,67 @@ module ts {
37483786
return SignatureHelp.getSignatureHelpCurrentArgumentState(sourceFile, position, applicableSpanStart);
37493787
}
37503788

3789+
function getSignatureAtPosition(filename: string, position: number): SignatureInfo {
3790+
var signatureHelpItems = getSignatureHelpItems(filename, position);
3791+
3792+
if (!signatureHelpItems) {
3793+
return undefined;
3794+
}
3795+
3796+
var currentArguemntState = getSignatureHelpCurrentArgumentState(filename, position, signatureHelpItems.applicableSpan.start());
3797+
3798+
var formalSignatures: FormalSignatureItemInfo[] = [];
3799+
forEach(signatureHelpItems.items, signature=> {
3800+
var signatureInfoString = signature.prefix;
3801+
3802+
var paramters: FormalParameterInfo[] = [];
3803+
for (var i = 0, n = signature.parameters.length; i < n; i++) {
3804+
var paramter = signature.parameters[i];
3805+
3806+
// add the parameter to the string
3807+
if (i) {
3808+
signatureInfoString += signature.separator;
3809+
}
3810+
var start = signatureInfoString.length;
3811+
signatureInfoString += paramter.display;
3812+
var end = signatureInfoString.length - 1;
3813+
3814+
// add the parameter to the list
3815+
paramters.push({
3816+
name: paramter.name,
3817+
isVariable: i == n -1 && signature.isVariadic,
3818+
docComment: paramter.documentation,
3819+
minChar: start,
3820+
limChar: end
3821+
});
3822+
3823+
}
3824+
3825+
signatureInfoString += signature.suffix;
3826+
3827+
formalSignatures.push({
3828+
signatureInfo: signatureInfoString,
3829+
docComment: signature.documentation,
3830+
parameters: paramters,
3831+
typeParameters: [],
3832+
docComments: signature.documentation
3833+
});
3834+
});
3835+
3836+
var actualSignature: ActualSignatureInfo = {
3837+
parameterMinChar: 0,
3838+
parameterLimChar: 0,
3839+
currentParameterIsTypeParameter: false,
3840+
currentParameter: currentArguemntState.argumentIndex
3841+
};
3842+
3843+
return {
3844+
actual: actualSignature,
3845+
formal: formalSignatures,
3846+
activeFormal: 0
3847+
};
3848+
}
3849+
37513850
/// Syntactic features
37523851
function getSyntaxTree(filename: string): TypeScript.SyntaxTree {
37533852
filename = TypeScript.switchToForwardSlashes(filename);
@@ -4364,6 +4463,7 @@ module ts {
43644463
getFormattingEditsForDocument: getFormattingEditsForDocument,
43654464
getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke,
43664465
getEmitOutput: getEmitOutput,
4466+
getSignatureAtPosition: getSignatureAtPosition,
43674467
};
43684468
}
43694469

src/services/shims.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ module ts {
9696
getSignatureHelpItems(fileName: string, position: number): string;
9797
getSignatureHelpCurrentArgumentState(fileName: string, position: number, applicableSpanStart: number): string;
9898

99+
getSignatureAtPosition(fileName: string, position: number): string;
100+
99101
// Returns a JSON encoded value of the type:
100102
// { canRename: boolean, localizedErrorMessage: string, displayName: string, fullDisplayName: string, kind: string, kindModifiers: string, triggerSpan: { start; length } }
101103
getRenameInfo(fileName: string, position: number): string;
@@ -604,6 +606,13 @@ module ts {
604606
});
605607
}
606608

609+
public getSignatureAtPosition(fileName: string, position: number): string {
610+
return this.forwardJSONCall(
611+
"getSignatureAtPosition('" + fileName + "', " + position + ")",
612+
() => {
613+
return this.languageService.getSignatureAtPosition(fileName, position);
614+
});
615+
}
607616

608617
/// GOTO DEFINITION
609618
/// Computes the definition location and file for the symbol

0 commit comments

Comments
 (0)