Skip to content

Commit 8872d00

Browse files
committed
Service updates
1 parent ee9397a commit 8872d00

File tree

4 files changed

+49
-16
lines changed

4 files changed

+49
-16
lines changed

src/Compiler/Service/ServiceInterfaceStubGenerator.fs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -904,8 +904,16 @@ module InterfaceStubGenerator =
904904

905905
| SynExpr.TypeApp(synExpr, _, _synTypeList, _commas, _, _, _range) -> walkExpr synExpr
906906

907-
| SynExpr.LetOrUse(bindings = synBindingList; body = synExpr) ->
908-
Option.orElse (List.tryPick walkBinding synBindingList) (walkExpr synExpr)
907+
| SynExpr.LetOrUse(isComputed = isComputed; bindings = synBindingList; body = synExpr) ->
908+
if isComputed then
909+
[
910+
for SynBinding(expr = bindingExpr) in synBindingList do
911+
yield bindingExpr
912+
yield synExpr
913+
]
914+
|> List.tryPick walkExpr
915+
else
916+
Option.orElse (List.tryPick walkBinding synBindingList) (walkExpr synExpr)
909917

910918
| SynExpr.TryWith(tryExpr = synExpr) -> walkExpr synExpr
911919

src/Compiler/Service/ServiceParseTreeWalk.fs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -669,17 +669,27 @@ module SyntaxTraversal =
669669
]
670670
|> pick expr
671671

672-
| SynExpr.LetOrUse(isRecursive = isRecursive; bindings = synBindingList; body = synExpr; range = range) ->
673-
match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with
674-
| None ->
672+
| SynExpr.LetOrUse(
673+
isRecursive = isRecursive; isComputed = isComputed; bindings = synBindingList; body = synExpr; range = range) ->
674+
if isComputed then
675675
[
676-
yield!
677-
synBindingList
678-
|> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path))
676+
for SynBinding(headPat = pat; expr = bindingExpr) in synBindingList do
677+
yield dive pat pat.Range traversePat
678+
yield dive bindingExpr bindingExpr.Range traverseSynExpr
679679
yield dive synExpr synExpr.Range traverseSynExpr
680680
]
681681
|> pick expr
682-
| x -> x
682+
else
683+
match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with
684+
| None ->
685+
[
686+
yield!
687+
synBindingList
688+
|> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path))
689+
yield dive synExpr synExpr.Range traverseSynExpr
690+
]
691+
|> pick expr
692+
| x -> x
683693

684694
| SynExpr.IfThenElse(ifExpr = synExpr; thenExpr = synExpr2; elseExpr = synExprOpt) ->
685695
[

src/Compiler/Service/ServiceParsedInputOps.fs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -834,9 +834,17 @@ module ParsedInput =
834834
walkExprWithKind (Some EntityKind.Type) e
835835
|> Option.orElseWith (fun () -> List.tryPick walkType tys)
836836

837-
| SynExpr.LetOrUse(bindings = bindings; body = e) ->
838-
List.tryPick walkBinding bindings
839-
|> Option.orElseWith (fun () -> walkExprWithKind parentKind e)
837+
| SynExpr.LetOrUse(isComputed = isComputed; bindings = bindings; body = e) ->
838+
if isComputed then
839+
[
840+
for SynBinding(expr = bindingExpr) in bindings do
841+
yield bindingExpr
842+
yield e
843+
]
844+
|> List.tryPick (walkExprWithKind parentKind)
845+
else
846+
List.tryPick walkBinding bindings
847+
|> Option.orElseWith (fun () -> walkExprWithKind parentKind e)
840848

841849
| SynExpr.IfThenElse(ifExpr = e1; thenExpr = e2; elseExpr = e3) ->
842850
walkExprWithKind parentKind e1
@@ -2102,9 +2110,16 @@ module ParsedInput =
21022110
List.iter walkType tys
21032111
walkExpr e
21042112

2105-
| SynExpr.LetOrUse(bindings = bindings; body = e) ->
2106-
List.iter walkBinding bindings
2107-
walkExpr e
2113+
| SynExpr.LetOrUse(isComputed = isComputed; bindings = bindings; body = e) ->
2114+
if isComputed then
2115+
for SynBinding(headPat = pat; expr = bindingExpr) in bindings do
2116+
walkPat pat
2117+
walkExpr bindingExpr
2118+
2119+
walkExpr e
2120+
else
2121+
List.iter walkBinding bindings
2122+
walkExpr e
21082123

21092124
| SynExpr.TryWith(tryExpr = e; withCases = clauses) ->
21102125
List.iter walkClause clauses

src/Compiler/Service/SynExpr.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ module SynExpr =
445445
let (|LetOrUse|_|) =
446446
dangling (function
447447
| SynExpr.LetOrUse _
448-
| SynExpr.LetOrUse _ as expr -> Some expr
448+
| SynExpr.LetOrUse(isComputed = false) as expr -> Some expr
449449
| _ -> None)
450450
451451
/// Matches a dangling sequential expression.

0 commit comments

Comments
 (0)