- 
                Notifications
    
You must be signed in to change notification settings  - Fork 730
 
Signature help implementation #861
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 43 commits
f7b2484
              202e970
              fff762c
              cbdb32b
              5d8476c
              dcd021f
              473fbed
              0d73105
              d68643b
              ed043a8
              e8c5dae
              0c01e98
              7acd18e
              4a359ec
              0ccbd20
              151f03a
              85cdb01
              a22ab20
              e57cf78
              50a3bbe
              4bc1228
              f415ca2
              ace6765
              e836eb1
              31bfa2a
              aafc78f
              1bf462c
              8f34a4f
              7a4c633
              d8db5cc
              9c81431
              628f4b4
              0ff32ac
              7469666
              e621d71
              7792a6e
              21b43cd
              c61cf81
              5b1f838
              98de4c1
              093ff05
              8fca88c
              09d531a
              ddb78d2
              9a3b8f7
              File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| 
          
            
          
           | 
    @@ -6,6 +6,7 @@ import ( | |
| 
     | 
||
| "github.com/microsoft/typescript-go/internal/ast" | ||
| "github.com/microsoft/typescript-go/internal/core" | ||
| "github.com/microsoft/typescript-go/internal/printer" | ||
| ) | ||
| 
     | 
||
| func (c *Checker) GetSymbolsInScope(location *ast.Node, meaning ast.SymbolFlags) []*ast.Symbol { | ||
| 
          
            
          
           | 
    @@ -299,10 +300,17 @@ func runWithInferenceBlockedFromSourceNode[T any](c *Checker, node *ast.Node, fn | |
| return result | ||
| } | ||
| 
     | 
||
| func GetResolvedSignatureForSignatureHelp(node *ast.Node, argumentCount int, c *Checker) (*Signature, []*Signature) { | ||
| var candidatesOutArray []*Signature | ||
| return runWithoutResolvedSignatureCaching(c, node, func() *Signature { | ||
| var res *Signature | ||
| res, candidatesOutArray = c.getResolvedSignatureWorker(node, CheckModeIsForSignatureHelp, argumentCount) | ||
| return res | ||
| }), candidatesOutArray | ||
                
       | 
||
| } | ||
| 
     | 
||
| func runWithoutResolvedSignatureCaching[T any](c *Checker, node *ast.Node, fn func() T) T { | ||
| ancestorNode := ast.FindAncestor(node, func(n *ast.Node) bool { | ||
| return ast.IsCallLikeOrFunctionLikeExpression(n) | ||
| }) | ||
| ancestorNode := ast.FindAncestor(node, ast.IsCallLikeOrFunctionLikeExpression) | ||
| if ancestorNode != nil { | ||
| cachedResolvedSignatures := make(map[*SignatureLinks]*Signature) | ||
| cachedTypes := make(map[*ValueSymbolLinks]*Type) | ||
| 
          
            
          
           | 
    @@ -506,3 +514,15 @@ func (c *Checker) GetConstantValue(node *ast.Node) any { | |
| 
     | 
||
| return nil | ||
| } | ||
| 
     | 
||
| func (c *Checker) getResolvedSignatureWorker(node *ast.Node, checkMode CheckMode, argumentCount int) (*Signature, []*Signature) { | ||
| parsedNode := printer.NewEmitContext().ParseNode(node) | ||
| c.apparentArgumentCount = &argumentCount | ||
                
      
                  andrewbranch marked this conversation as resolved.
               
          
            Show resolved
            Hide resolved
         | 
||
| candidatesOutArray := &[]*Signature{} | ||
| var res *Signature | ||
| if parsedNode != nil { | ||
| res = c.getResolvedSignature(parsedNode, candidatesOutArray, checkMode) | ||
| } | ||
| c.apparentArgumentCount = nil | ||
| return res, *candidatesOutArray | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.