@@ -2,13 +2,20 @@ fsi.AddPrinter (fun (_: obj) ->
2
2
let fsiAsm = " FSI-ASSEMBLY"
3
3
4
4
let asmNum ( asm : System.Reflection.Assembly ) =
5
- asm.GetName() .Name.Replace( fsiAsm, " " ) |> System.Int32.TryParse |> fun ( b , v ) -> if b then v else 0
5
+ match asm.GetName() .Name with
6
+ | null -> 0
7
+ | name -> name.Replace( fsiAsm, " " ) |> System.Int32.TryParse |> fun ( b , v ) -> if b then v else 0
6
8
7
9
let fsiAssemblies =
8
10
// use multiple assemblies (FSI-ASSEMBLY1, FSI-ASSEMBLY2...) if single isn't found
9
11
let fsiAsms =
10
12
System.AppDomain.CurrentDomain.GetAssemblies()
11
- |> Array.filter ( fun asm -> asm.GetName() .Name.StartsWith fsiAsm)
13
+ |> Array.filter ( fun asm ->
14
+ match asm.GetName() .Name with
15
+ | null -> false
16
+ | name -> name.StartsWith fsiAsm
17
+ )
18
+
12
19
fsiAsms
13
20
|> Array.tryFind ( fun asm -> asm.GetName() .Name = fsiAsm)
14
21
|> function
@@ -30,9 +37,14 @@ fsi.AddPrinter (fun (_: obj) ->
30
37
|> Seq.sortBy ( fun ( _ , ( i , _ )) -> i) //order by original index
31
38
|> Seq.map ( fun ( _ , ( _ , pi )) -> pi.Name, pi.GetValue( null , Array.empty), pi.PropertyType) //discard ordering index, project usuable watch value
32
39
40
+ let isFsiAssembly ( ty : System.Type ) =
41
+ match ty.FullName with
42
+ | null -> false
43
+ | name -> name.StartsWith( " FSI" )
44
+
33
45
let getRecords ( fsiAssembly : System.Reflection.Assembly ) =
34
46
fsiAssembly.GetTypes()
35
- |> Seq.filter ( fun ty -> ty.FullName.StartsWith ( " FSI " ))
47
+ |> Seq.filter isFsiAssembly
36
48
|> Seq.filter ( Reflection.FSharpType.IsRecord)
37
49
|> Seq.map ( fun ty ->
38
50
let flds =
@@ -43,9 +55,12 @@ fsi.AddPrinter (fun (_: obj) ->
43
55
44
56
let getUnions ( fsiAssembly : System.Reflection.Assembly ) =
45
57
fsiAssembly.GetTypes()
46
- |> Seq.filter ( fun ty -> ty.FullName.StartsWith ( " FSI " ))
58
+ |> Seq.filter isFsiAssembly
47
59
|> Seq.filter ( Reflection.FSharpType.IsUnion)
48
- |> Seq.filter ( fun ty -> ty.BaseType.Name = " Object" ) //find DU declaration not DU cases
60
+ |> Seq.filter ( fun ty ->
61
+ match ty.BaseType with
62
+ | null -> false
63
+ | ty -> ty.Name = " Object" ) //find DU declaration not DU cases
49
64
|> Seq.map ( fun ty ->
50
65
let flds =
51
66
Reflection.FSharpType.GetUnionCases ty
@@ -60,7 +75,7 @@ fsi.AddPrinter (fun (_: obj) ->
60
75
61
76
let getFuncs ( fsiAssembly : System.Reflection.Assembly ) =
62
77
fsiAssembly.GetTypes()
63
- |> Seq.filter ( fun ty -> ty.FullName.StartsWith ( " FSI " ))
78
+ |> Seq.filter isFsiAssembly
64
79
|> Seq.filter ( Reflection.FSharpType.IsModule)
65
80
|> Seq.choose ( fun ty ->
66
81
let meth =
@@ -97,10 +112,9 @@ fsi.AddPrinter (fun (_: obj) ->
97
112
98
113
let fromAssemblies folder =
99
114
fsiAssemblies
100
- |> Array.toList
101
- |> Seq.map ( fun asm -> asmNum asm, asm)
102
- |> Seq.sortByDescending fst // assume later/higher assembly # always shadows
103
- |> Seq.fold folder ( Set.empty, Seq.empty)
115
+ |> Array.map ( fun asm -> asmNum asm, asm)
116
+ |> Array.sortByDescending fst // assume later/higher assembly # always shadows
117
+ |> Array.fold folder ( Set.empty, Seq.empty)
104
118
|> snd
105
119
106
120
let arrangeVars ( state : Set < string > * seq < string >) ( step , asm ) =
@@ -123,7 +137,7 @@ fsi.AddPrinter (fun (_: obj) ->
123
137
let shadowed = ( fst state) .Contains name
124
138
let parms =
125
139
parms
126
- |> Seq.map ( fun ( n , t ) -> n + " : " + t )
140
+ |> Seq.map ( fun ( n , t ) -> $ " {n}: {t} " )
127
141
|> String.concat " ; "
128
142
formatVarsAndFuncs name parms typ step shadowed, name)
129
143
let names =
@@ -199,4 +213,4 @@ fsi.AddPrinter (fun (_: obj) ->
199
213
}
200
214
|> Async.Start
201
215
202
- null )
216
+ " " )
0 commit comments