@@ -661,6 +661,8 @@ module ts {
661
661
getSignatureHelpItems ( fileName : string , position : number ) : SignatureHelpItems ;
662
662
getSignatureHelpCurrentArgumentState ( fileName : string , position : number , applicableSpanStart : number ) : SignatureHelpState ;
663
663
664
+ getSignatureAtPosition ( fileName : string , position : number ) : SignatureInfo ;
665
+
664
666
getRenameInfo ( fileName : string , position : number ) : RenameInfo ;
665
667
getDefinitionAtPosition ( fileName : string , position : number ) : DefinitionInfo [ ] ;
666
668
getReferencesAtPosition ( fileName : string , position : number ) : ReferenceEntry [ ] ;
@@ -686,6 +688,41 @@ module ts {
686
688
dispose ( ) : void ;
687
689
}
688
690
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
+
689
726
export interface ClassifiedSpan {
690
727
textSpan : TypeScript . TextSpan ;
691
728
classificationType : string ; // ClassificationTypeNames
@@ -3734,6 +3771,69 @@ module ts {
3734
3771
return SignatureHelp . getSignatureHelpCurrentArgumentState ( sourceFile , position , applicableSpanStart ) ;
3735
3772
}
3736
3773
3774
+ function getSignatureAtPosition ( filename : string , position : number ) : SignatureInfo {
3775
+ var signatureHelpItems = getSignatureHelpItems ( filename , position ) ;
3776
+
3777
+ if ( ! signatureHelpItems ) {
3778
+ return undefined ;
3779
+ }
3780
+
3781
+ var currentArguemntState = getSignatureHelpCurrentArgumentState ( filename , position , signatureHelpItems . applicableSpan . start ( ) ) ;
3782
+
3783
+ var formalSignatures : FormalSignatureItemInfo [ ] = [ ] ;
3784
+ forEach ( signatureHelpItems . items , signature => {
3785
+ var signatureInfoString = signature . prefix ;
3786
+
3787
+ var parameters : FormalParameterInfo [ ] = [ ] ;
3788
+ if ( signature . parameters ) {
3789
+ for ( var i = 0 , n = signature . parameters . length ; i < n ; i ++ ) {
3790
+ var parameter = signature . parameters [ i ] ;
3791
+
3792
+ // add the parameter to the string
3793
+ if ( i ) {
3794
+ signatureInfoString += signature . separator ;
3795
+ }
3796
+
3797
+ var start = signatureInfoString . length ;
3798
+ signatureInfoString += parameter . display ;
3799
+ var end = signatureInfoString . length - 1 ;
3800
+
3801
+ // add the parameter to the list
3802
+ parameters . push ( {
3803
+ name : parameter . name ,
3804
+ isVariable : i == n - 1 && signature . isVariadic ,
3805
+ docComment : parameter . documentation ,
3806
+ minChar : start ,
3807
+ limChar : end
3808
+ } ) ;
3809
+ }
3810
+ }
3811
+
3812
+ signatureInfoString += signature . suffix ;
3813
+
3814
+ formalSignatures . push ( {
3815
+ signatureInfo : signatureInfoString ,
3816
+ docComment : signature . documentation ,
3817
+ parameters : parameters ,
3818
+ typeParameters : [ ] ,
3819
+ docComments : signature . documentation
3820
+ } ) ;
3821
+ } ) ;
3822
+
3823
+ var actualSignature : ActualSignatureInfo = {
3824
+ parameterMinChar : signatureHelpItems . applicableSpan . start ( ) ,
3825
+ parameterLimChar : signatureHelpItems . applicableSpan . end ( ) ,
3826
+ currentParameterIsTypeParameter : false ,
3827
+ currentParameter : currentArguemntState . argumentIndex
3828
+ } ;
3829
+
3830
+ return {
3831
+ actual : actualSignature ,
3832
+ formal : formalSignatures ,
3833
+ activeFormal : 0
3834
+ } ;
3835
+ }
3836
+
3737
3837
/// Syntactic features
3738
3838
function getSyntaxTree ( filename : string ) : TypeScript . SyntaxTree {
3739
3839
filename = TypeScript . switchToForwardSlashes ( filename ) ;
@@ -4381,6 +4481,7 @@ module ts {
4381
4481
getFormattingEditsForDocument : getFormattingEditsForDocument ,
4382
4482
getFormattingEditsAfterKeystroke : getFormattingEditsAfterKeystroke ,
4383
4483
getEmitOutput : getEmitOutput ,
4484
+ getSignatureAtPosition : getSignatureAtPosition ,
4384
4485
} ;
4385
4486
}
4386
4487
0 commit comments