Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9b55ecc

Browse files
auduchinokTIHan
authored andcommitted
Dive into types in type test expressions in AST visitor traverse (dotnet#5951)
* Dive into types in type test expressions in AST visitor* Add test* Update VisualFSharp test* Update fsproj* Cleanup test
1 parente2902ee commit9b55ecc

File tree

8 files changed

+64
-39
lines changed

8 files changed

+64
-39
lines changed

‎fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@
6666
<CompileInclude="$(FSharpSourcesRoot)\..\tests\service\TokenizerTests.fs">
6767
<Link>TokenizerTests.fs</Link>
6868
</Compile>
69+
<CompileInclude="$(FSharpSourcesRoot)\..\tests\service\ServiceUntypedParseTests.fs">
70+
<Link>ServiceUntypedParseTests.fs</Link>
71+
</Compile>
72+
<CompileInclude="$(FSharpSourcesRoot)\..\tests\service\TreeVisitorTests.fs">
73+
<Link>TreeVisitorTests.fs</Link>
74+
</Compile>
6975
<CompileInclude="$(FSharpSourcesRoot)\..\tests\service\Program.fs"Condition="'$(TargetFramework)' == 'netcoreapp2.0'">
7076
<Link>Program.fs</Link>
7177
</Compile>

‎src/fsharp/service/ServiceParseTreeWalk.fs‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,9 +456,12 @@ module public AstTraversal =
456456
dive synExpr2 synExpr2.Range traverseSynExpr
457457
dive synExpr3 synExpr3.Range traverseSynExpr]
458458
|> pick expr
459-
| SynExpr.TypeTest(synExpr,_synType,_range)-> traverseSynExpr synExpr
460-
| SynExpr.Upcast(synExpr,_synType,_range)-> traverseSynExpr synExpr
461-
| SynExpr.Downcast(synExpr,_synType,_range)-> traverseSynExpr synExpr
459+
| SynExpr.TypeTest(synExpr, synType,_range)
460+
| SynExpr.Upcast(synExpr, synType,_range)
461+
| SynExpr.Downcast(synExpr, synType,_range)->
462+
[dive synExpr synExpr.Range traverseSynExpr
463+
dive synType synType.Range traverseSynType]
464+
|> pick expr
462465
| SynExpr.InferredUpcast(synExpr,_range)-> traverseSynExpr synExpr
463466
| SynExpr.InferredDowncast(synExpr,_range)-> traverseSynExpr synExpr
464467
| SynExpr.Null(_range)-> None

‎tests/service/Common.fs‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -195,17 +195,18 @@ let parseAndCheckScript (file, input) =
195195
| FSharpCheckFileAnswer.Succeeded(res)-> parseResult, res
196196
| res-> failwithf"Parsing did not finish... (%A)" res
197197

198-
letparseSourceCode(name:string,code:string)=
199-
letlocation= Path.Combine(Path.GetTempPath(),"test"+string(hash(name, code)))
200-
try Directory.CreateDirectory(location)|> ignorewith_->()
198+
letparseSource(source:string)=
199+
letlocation= Path.GetTempFileName()
200+
letfilePath= Path.Combine(location,".fs")
201+
letdllPath= Path.Combine(location,".dll")
201202

202-
letprojPath= Path.Combine(location, name+".fsproj")
203-
letfilePath= Path.Combine(location, name+".fs")
204-
letdllPath= Path.Combine(location, name+".dll")
205203
letargs= mkProjectCommandLineArgs(dllPath,[filePath])
206204
letoptions,errors= checker.GetParsingOptionsFromCommandLineArgs(List.ofArray args)
207-
letparseResults= checker.ParseFile(filePath, code, options)|> Async.RunSynchronously
208-
parseResults.ParseTree
205+
letparseResults= checker.ParseFile(filePath, source, options)|> Async.RunSynchronously
206+
207+
match parseResults.ParseTreewith
208+
| Some parseTree-> parseTree
209+
| None-> failwithf"Expected there to be a parse tree for source:\n%s" source
209210

210211
/// Extract range info
211212
lettups(m:Range.range)=(m.StartLine, m.StartColumn),(m.EndLine, m.EndColumn)

‎tests/service/InteractiveCheckerTests.fs‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,7 @@ let internal identsAndRanges (input: Ast.ParsedInput) =
5454
| Ast.ParsedInput.SigFile_->[]
5555

5656
letinternalparseAndExtractRanges code=
57-
letfile="Test"
58-
letresult= parseSourceCode(file, code)
59-
match resultwith
60-
| Some tree-> tree|> identsAndRanges
61-
| None-> failwith"fail to parse..."
57+
parseSource code|> identsAndRanges
6258

6359
letinput=
6460
"""

‎tests/service/ServiceUntypedParseTests.fs‎

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,12 @@ let private (=>) (source: string) (expected: CompletionContext option) =
4040
match markerPoswith
4141
| None-> failwithf"Marker '%s' was not found in the source code" Marker
4242
| Some markerPos->
43-
match parseSourceCode("C:\\test.fs", source)with
44-
| None-> failwith"No parse tree"
45-
| Some parseTree->
46-
letactual= UntypedParseImpl.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line])
47-
try Assert.AreEqual(expected, actual)
48-
with e->
49-
printfn"ParseTree:%A" parseTree
50-
reraise()
43+
letparseTree= parseSource source
44+
letactual= UntypedParseImpl.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line])
45+
try Assert.AreEqual(expected, actual)
46+
with e->
47+
printfn"ParseTree:%A" parseTree
48+
reraise()
5149

5250
moduleAttributeCompletion=
5351
[<Test>]

‎tests/service/StructureTests.fs‎

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,19 @@ let (=>) (source: string) (expectedRanges: (Range * Range) list) =
4040

4141
letgetRange(r:range)=(r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)
4242

43-
letast= parseSourceCode(fileName, source)
44-
43+
lettree= parseSource source
4544
try
46-
match astwith
47-
| Some tree->
48-
letactual=
49-
Structure.getOutliningRanges lines tree
50-
|> Seq.filter(fun sr-> sr.Range.StartLine<> sr.Range.EndLine)
51-
|> Seq.map(fun sr-> getRange sr.Range, getRange sr.CollapseRange)
52-
|> Seq.sort
53-
|> List.ofSeq
54-
letexpected= List.sort expectedRanges
55-
if actual<> expectedthen
56-
failwithf"Expected%s, but was%s"(formatList expected)(formatList actual)
57-
| None-> failwithf"Expected there to be a parse tree for source:\n%s" source
45+
letactual=
46+
Structure.getOutliningRanges lines tree
47+
|> Seq.filter(fun sr-> sr.Range.StartLine<> sr.Range.EndLine)
48+
|> Seq.map(fun sr-> getRange sr.Range, getRange sr.CollapseRange)
49+
|> Seq.sort
50+
|> List.ofSeq
51+
letexpected= List.sort expectedRanges
52+
if actual<> expectedthen
53+
failwithf"Expected%s, but was%s"(formatList expected)(formatList actual)
5854
with_->
59-
printfn"AST:\n%+A"ast
55+
printfn"AST:\n%+A"tree
6056
reraise()
6157

6258
[<Test>]

‎tests/service/TreeVisitorTests.fs‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
moduleTests.Service.TreeVisitorTests
2+
3+
openFSharp.Compiler.Service.Tests.Common
4+
openMicrosoft.FSharp.Compiler.Range
5+
openMicrosoft.FSharp.Compiler.SourceCodeServices.AstTraversal
6+
openNUnit.Framework
7+
8+
[<Test>]
9+
let``Visit type test``()=
10+
letvisitor=
11+
{new AstVisitorBase<_>()with
12+
memberx.VisitExpr(_,_,defaultTraverse,expr)= defaultTraverse expr
13+
memberx.VisitType(_,_)= Some()}
14+
15+
letsource="123 :? int"
16+
letparseTree= parseSource source
17+
18+
Traverse(mkPos111, parseTree, visitor)
19+
|> Option.defaultWith(fun _-> failwith"Did not visit type")
20+
21+
Traverse(mkPos13, parseTree, visitor)
22+
|> Option.iter(fun _-> failwith"Should not visit type")

‎vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@
109109
<CompileInclude="UnusedOpensTests.fs">
110110
<Link>CompilerService\UnusedOpensTests.fs</Link>
111111
</Compile>
112+
<CompileInclude="..\..\..\tests\service\TreeVisitorTests.fs">
113+
<Link>CompilerService\TreeVisitorTests.fs</Link>
114+
</Compile>
112115
<CompileInclude="SyntacticColorizationServiceTests.fs">
113116
<Link>Roslyn\SyntacticColorizationServiceTests.fs</Link>
114117
</Compile>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp