Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions src/fsharp/service/FSharpParseFileResults.fs
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,50 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput,
None
})
result.IsSome

member _.IsTypeAnnotationGivenAtPosition pos =
let result =
SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with
member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) =
match expr with
| SynExpr.Typed (_expr, _typeExpr, range) when Position.posEq range.Start pos ->
Some range
| _ -> defaultTraverse expr

override _.VisitSimplePats(_path, pats) =
match pats with
| [] -> None
| _ ->
let exprFunc pat =
match pat with
| SynSimplePat.Typed (_pat, _targetExpr, range) when Position.posEq range.Start pos ->
Some range
| _ ->
None

pats |> List.tryPick exprFunc

override _.VisitPat(_path, defaultTraverse, pat) =
match pat with
| SynPat.Typed (_pat, _targetType, range) when Position.posEq range.Start pos ->
Some range
| _ -> defaultTraverse pat })
result.IsSome

member _.IsBindingALambdaAtPosition pos =
let result =
SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with
member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) =
defaultTraverse expr

override _.VisitBinding(_path, defaultTraverse, binding) =
match binding with
| SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, range, _) when Position.posEq range.Start pos ->
match expr with
| SynExpr.Lambda _ -> Some range
| _ -> None
| _ -> defaultTraverse binding })
result.IsSome

/// Get declared items and the selected item at the specified location
member _.GetNavigationItemsImpl() =
Expand Down
6 changes: 6 additions & 0 deletions src/fsharp/service/FSharpParseFileResults.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ type public FSharpParseFileResults =
/// Determines if the given position is contained within a curried parameter in a binding.
member IsPositionContainedInACurriedParameter: pos: pos -> bool

/// Determines if the expression or pattern at the given position has a type annotation
member IsTypeAnnotationGivenAtPosition: pos -> bool

/// Determines if the binding at the given position is bound to a lambda expression
member IsBindingALambdaAtPosition: pos -> bool

/// Name of the file for which this information were created
member FileName: string

Expand Down
Loading