Skip to content

Commit

Permalink
Enable explicit tests: part 2
Browse files Browse the repository at this point in the history
  • Loading branch information
DedSec256 committed Aug 29, 2024
1 parent 1493e30 commit 7fa91e9
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -742,38 +742,46 @@ type FSharpTypingAssist(lifetime, dependencies) as this =

let document = textControl.Document

let checkExpr (expr: IFSharpExpression) (node: ITreeNode) prevTokenEnd =
if isNotNull expr && expr.GetDocumentEndOffset().Offset = prevTokenEnd
then Some (node.GetDocumentRange())
else None

let fsFile = textControl.GetFSharpFile(dependencies.Solution)
let expr = fsFile.GetNode<IFSharpExpression>(DocumentOffset(document, lexer.TokenStart))
if isNull expr then false else

let range =
let inline checkExpr (expr: IFSharpExpression) (node: ITreeNode) =
if isNotNull expr && isNotNull node && expr.GetDocumentEndOffset().Offset = prevTokenEnd
then Some (node.GetDocumentRange())
else None

match expr with
// if expr then ...
// elif ... {caret}
| :? IElifExpr as elifExpr when (elifExpr.ThenExpr :? IFromErrorExpr) ->
let ifExpr = IfThenElseExprNavigator.GetByElseExpr(elifExpr)
if isNull ifExpr then None else
checkExpr elifExpr.ConditionExpr ifExpr.ConditionExpr

// if expr then {caret}
// No info is available after error recovery, we check that range is surrounded with if ... then.
| :? IFromErrorExpr as fromErrorExpr ->
let expr = fromErrorExpr.Expression
checkExpr expr expr prevTokenEnd
| :? IIfThenElseExpr as ifThenElseExpr when (ifThenElseExpr.ThenExpr :? IFromErrorExpr) ->
//let expr = fromErrorExpr.Expression
checkExpr ifThenElseExpr.ConditionExpr ifThenElseExpr.ConditionExpr

// while expr do {caret}
| :? IWhileExpr as whileExpr ->
let expr = whileExpr.ConditionExpr
checkExpr expr expr prevTokenEnd
checkExpr expr expr

// for i = ... to ... do {caret}
| :? IForExpr as forExpr ->
checkExpr forExpr.DoExpression forExpr.Identifier prevTokenEnd
checkExpr forExpr.DoExpression forExpr.Identifier

// for ... in ... do {caret}
| :? IForEachExpr as foreachExpr ->
checkExpr foreachExpr.InExpression foreachExpr.Pattern prevTokenEnd
checkExpr foreachExpr.InExpression foreachExpr.Pattern

| _ -> None

//expr.ProcessThisAndDescendants(processor)
match range with
| None -> false
| Some range ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,10 @@ type FSharpTypingAssistTest() =
[<Test>] member x.``Enter after error 06 - match``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 07 - multiline if with parens``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 08 - multiline if before then``() = x.DoNamedTest()
[<Test; Explicit>] member x.``Enter after error 09 - After then``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 09 - After then``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 10 - After while``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 11 - After while and comments``() = x.DoNamedTest()
[<Test; Explicit>] member x.``Enter after error 12 - After then and elif``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 12 - After then and elif``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 13 - After for in do``() = x.DoNamedTest()
[<Test>] member x.``Enter after error 14 - After for do``() = x.DoNamedTest()

Expand Down

0 comments on commit 7fa91e9

Please sign in to comment.