-
-
Notifications
You must be signed in to change notification settings - Fork 194
/
RangeHelpers.fs
54 lines (39 loc) · 1.7 KB
/
RangeHelpers.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
namespace Fantomas.Core
open FSharp.Compiler.Text
[<RequireQualifiedAccess>]
module RangeHelpers =
/// Checks if Range B is fully contained by Range A
let ``range contains`` (a: Range) (b: Range) =
(a.Start.Line, a.Start.Column)
<= (b.Start.Line, b.Start.Column)
&& (a.End.Line, a.End.Column)
>= (b.End.Line, b.End.Column)
// check if b is after a
let ``range after`` (a: Range) (b: Range) =
(a.StartLine, a.StartColumn) < (b.StartLine, b.StartColumn)
let rangeStartEq (r1: Range) (r2: Range) =
r1.StartLine = r2.StartLine
&& r1.StartColumn = r2.StartColumn
let rangeEndEq (r1: Range) (r2: Range) =
r1.EndLine = r2.EndLine
&& r1.EndColumn = r2.EndColumn
let rangeEq = Range.equals
let isAdjacentTo (r1: Range) (r2: Range) : bool =
r1.FileName = r2.FileName
&& r1.End.Line = r2.Start.Line
&& r1.EndColumn = r2.StartColumn
let mkStartRange (size: int) (r: range) : range =
Range.mkRange r.FileName r.Start (Position.mkPos r.StartLine (r.StartColumn + size))
let mkStartEndRange (size: int) (r: range) : range * range =
let startRange = mkStartRange size r
let endRange =
Range.mkRange r.FileName (Position.mkPos r.EndLine (r.EndColumn - size)) r.End
startRange, endRange
module RangePatterns =
let (|StartEndRange|) (size: int) (range: range) =
let o, c = RangeHelpers.mkStartEndRange size range
o, range, c
let (|StartRange|) (size: int) (range: range) =
let startRange =
Range.mkRange range.FileName range.Start (Position.mkPos range.StartLine (range.StartColumn + size))
startRange, range