@@ -74,15 +74,51 @@ func (l *LanguageService) GetSignatureHelpItems(
7474 return nil
7575 }
7676
77+ type signatureHelpTriggerReasonKind int32
78+
79+ const (
80+ signatureHelpTriggerReasonKindNone signatureHelpTriggerReasonKind = 0 // was undefined
81+ signatureHelpTriggerReasonKindInvoked signatureHelpTriggerReasonKind = iota // was "invoked"
82+ signatureHelpTriggerReasonKindCharacterTyped // was "characterTyped"
83+ signatureHelpTriggerReasonKindRetriggered // was "retrigger"
84+ )
85+
86+ // Emulate VS Code's toTsTriggerReason.
87+ triggerReasonKind := signatureHelpTriggerReasonKindNone
88+ if context != nil {
89+ switch context .TriggerKind {
90+ case lsproto .SignatureHelpTriggerKindTriggerCharacter :
91+ if context .TriggerCharacter != nil {
92+ if context .IsRetrigger {
93+ triggerReasonKind = signatureHelpTriggerReasonKindRetriggered
94+ } else {
95+ triggerReasonKind = signatureHelpTriggerReasonKindCharacterTyped
96+ }
97+ } else {
98+ triggerReasonKind = signatureHelpTriggerReasonKindInvoked
99+ }
100+ case lsproto .SignatureHelpTriggerKindContentChange :
101+ if context .IsRetrigger {
102+ triggerReasonKind = signatureHelpTriggerReasonKindRetriggered
103+ } else {
104+ triggerReasonKind = signatureHelpTriggerReasonKindCharacterTyped
105+ }
106+ case lsproto .SignatureHelpTriggerKindInvoked :
107+ triggerReasonKind = signatureHelpTriggerReasonKindInvoked
108+ default :
109+ triggerReasonKind = signatureHelpTriggerReasonKindInvoked
110+ }
111+ }
112+
77113 // Only need to be careful if the user typed a character and signature help wasn't showing.
78- onlyUseSyntacticOwners := context != nil && context . TriggerKind == lsproto . SignatureHelpTriggerKindTriggerCharacter
114+ onlyUseSyntacticOwners := triggerReasonKind == signatureHelpTriggerReasonKindCharacterTyped
79115
80116 // Bail out quickly in the middle of a string or comment, don't provide signature help unless the user explicitly requested it.
81117 if onlyUseSyntacticOwners && IsInString (sourceFile , position , startingToken ) { // isInComment(sourceFile, position) needs formatting implemented
82118 return nil
83119 }
84120
85- isManuallyInvoked := context != nil && context . TriggerKind == lsproto . SignatureHelpTriggerKindInvoked
121+ isManuallyInvoked := triggerReasonKind == signatureHelpTriggerReasonKindInvoked
86122 argumentInfo := getContainingArgumentInfo (startingToken , sourceFile , typeChecker , isManuallyInvoked , position )
87123 if argumentInfo == nil {
88124 return nil
@@ -94,11 +130,13 @@ func (l *LanguageService) GetSignatureHelpItems(
94130 candidateInfo := getCandidateOrTypeInfo (argumentInfo , typeChecker , sourceFile , startingToken , onlyUseSyntacticOwners )
95131 // cancellationToken.throwIfCancellationRequested();
96132
97- // if (!candidateInfo) { !!!
98- // // We didn't have any sig help items produced by the TS compiler. If this is a JS
99- // // file, then see if we can figure out anything better.
100- // return isSourceFileJS(sourceFile) ? createJSSignatureHelpItems(argumentInfo, program, cancellationToken) : undefined;
101- // }
133+ if candidateInfo == nil {
134+ // !!!
135+ // // We didn't have any sig help items produced by the TS compiler. If this is a JS
136+ // // file, then see if we can figure out anything better.
137+ // return isSourceFileJS(sourceFile) ? createJSSignatureHelpItems(argumentInfo, program, cancellationToken) : undefined;
138+ return nil
139+ }
102140
103141 // return typeChecker.runWithCancellationToken(cancellationToken, typeChecker =>
104142 if candidateInfo .candidateInfo != nil {
0 commit comments