Skip to content

Commit 418d37a

Browse files
cartermpbaronfel
andauthored
Add "Add type annotation to parameter" refactoring + remove dangling file lost in recent refactorings (#10937)
Co-authored-by: Chet Husk <[email protected]>
1 parent 1f6df60 commit 418d37a

23 files changed

+496
-1728
lines changed

src/fsharp/service/FSharpParseFileResults.fs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,50 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput,
359359
None
360360
})
361361
result.IsSome
362+
363+
member _.IsTypeAnnotationGivenAtPosition pos =
364+
let result =
365+
SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with
366+
member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) =
367+
match expr with
368+
| SynExpr.Typed (_expr, _typeExpr, range) when Position.posEq range.Start pos ->
369+
Some range
370+
| _ -> defaultTraverse expr
371+
372+
override _.VisitSimplePats(_path, pats) =
373+
match pats with
374+
| [] -> None
375+
| _ ->
376+
let exprFunc pat =
377+
match pat with
378+
| SynSimplePat.Typed (_pat, _targetExpr, range) when Position.posEq range.Start pos ->
379+
Some range
380+
| _ ->
381+
None
382+
383+
pats |> List.tryPick exprFunc
384+
385+
override _.VisitPat(_path, defaultTraverse, pat) =
386+
match pat with
387+
| SynPat.Typed (_pat, _targetType, range) when Position.posEq range.Start pos ->
388+
Some range
389+
| _ -> defaultTraverse pat })
390+
result.IsSome
391+
392+
member _.IsBindingALambdaAtPosition pos =
393+
let result =
394+
SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with
395+
member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) =
396+
defaultTraverse expr
397+
398+
override _.VisitBinding(_path, defaultTraverse, binding) =
399+
match binding with
400+
| SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, range, _) when Position.posEq range.Start pos ->
401+
match expr with
402+
| SynExpr.Lambda _ -> Some range
403+
| _ -> None
404+
| _ -> defaultTraverse binding })
405+
result.IsSome
362406

363407
/// Get declared items and the selected item at the specified location
364408
member _.GetNavigationItemsImpl() =

src/fsharp/service/FSharpParseFileResults.fsi

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ type public FSharpParseFileResults =
5252
/// Determines if the given position is contained within a curried parameter in a binding.
5353
member IsPositionContainedInACurriedParameter: pos: pos -> bool
5454

55+
/// Determines if the expression or pattern at the given position has a type annotation
56+
member IsTypeAnnotationGivenAtPosition: pos -> bool
57+
58+
/// Determines if the binding at the given position is bound to a lambda expression
59+
member IsBindingALambdaAtPosition: pos -> bool
60+
5561
/// Name of the file for which this information were created
5662
member FileName: string
5763

0 commit comments

Comments
 (0)