@@ -2,16 +2,20 @@ namespace CompilerDirectives
2
2
3
3
open Microsoft.FSharp .Control
4
4
open Xunit
5
- open FSharp.Test .Compiler
5
+ open Internal.Utilities
6
+ open FSharp.Compiler
6
7
open FSharp.Compiler .CodeAnalysis
7
- open FSharp.Compiler .Text
8
+ open FSharp.Compiler .DiagnosticsLogger
9
+ open FSharp.Compiler .Features
10
+ open FSharp.Compiler .Lexhelp
8
11
open FSharp.Compiler .Syntax
12
+ open FSharp.Compiler .Text
13
+ open FSharp.Compiler .UnicodeLexing
9
14
10
15
module Line =
11
16
12
- let checker = FSharpChecker.Create()
13
-
14
17
let parse ( source : string ) =
18
+ let checker = FSharpChecker.Create()
15
19
let langVersion = " preview"
16
20
let sourceFileName = __ SOURCE_ FILE__
17
21
let parsingOptions =
@@ -63,4 +67,51 @@ printfn ""
63
67
| ParsedInput.SigFile _ -> failwith " unexpected: sig file"
64
68
if exprRange <> expectedRange then
65
69
failwith $" case{case}: expected: {expectedRange}, found {exprRange}"
66
-
70
+
71
+
72
+
73
+
74
+
75
+ let private getTokens sourceText =
76
+ let langVersion = LanguageVersion.Default
77
+ let lexargs =
78
+ mkLexargs (
79
+ [],
80
+ IndentationAwareSyntaxStatus( true , false ),
81
+ LexResourceManager(),
82
+ [],
83
+ DiscardErrorsLogger,
84
+ PathMap.empty,
85
+ true
86
+ )
87
+ let lexbuf = StringAsLexbuf( true , langVersion, None, sourceText)
88
+ resetLexbufPos " test.fs" lexbuf
89
+ let tokenizer _ =
90
+ let t = Lexer.token lexargs true lexbuf
91
+ let p = lexbuf.StartPos
92
+ t, FileIndex.fileOfFileIndex p.FileIndex, p.OriginalLine, p.Line
93
+ let isNotEof ( t , _ , _ , _ ) = match t with Parser.EOF _ -> false | _ -> true
94
+ Seq.initInfinite tokenizer |> Seq.takeWhile isNotEof |> Seq.toList
95
+
96
+ let private code = """
97
+ 1
98
+ #line 5 "other.fs"
99
+ 2
100
+ #line 10 "test.fs"
101
+ 3
102
+ """
103
+
104
+ let private expected = [
105
+ " test.fs" , 2 , 2
106
+ " other.fs" , 4 , 5
107
+ " test.fs" , 6 , 10
108
+ ]
109
+
110
+ [<Fact>]
111
+ let checkOriginalLineNumbers () =
112
+ let tokens = getTokens code
113
+ Assert.Equal( expected.Length, tokens.Length)
114
+ for (( e_ idx, e_ oLine, e_ line), (_, idx, oLine, line)) in List.zip expected tokens do
115
+ Assert.Equal( e_ idx, idx)
116
+ Assert.Equal( e_ oLine, oLine)
117
+ Assert.Equal( e_ line, line)
0 commit comments