Skip to content

Commit 6636fb2

Browse files
authored
Merge PR #657 from webwarrior-ws/upgrade-fcs-41-rebased
* Upgrade Ionide.ProjInfo to 0.58.0 (needed to bring the fix for parsing legacy projects, upstream PR: ionide/proj-info#131 , upstream commit: ionide/proj-info@3542cee ). * Upgrade FSharp.Compiler.Service to version 41 (needed because the new Ionide.ProjInfo version, depends on a higher version of F.C.S.). * Made changes to framework, rules and test framework code necessary to accomodate API changes in this version 41.x of FCS compared to version 40. Fixes #336
2 parents 75f19aa + 7fd8c62 commit 6636fb2

File tree

69 files changed

+812
-1182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+812
-1182
lines changed

Directory.Build.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
<PublishRepositoryUrl>true</PublishRepositoryUrl>
77
<EmbedUntrackedSources>true</EmbedUntrackedSources>
88
<DebugType>embedded</DebugType>
9+
<NoWarn>$(NoWarn);NU1605</NoWarn>
910
</PropertyGroup>
1011
</Project>

paket.dependencies

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ nuget Argu
77
nuget BenchmarkDotNet
88
nuget BenchmarkDotNet.Diagnostics.Windows
99
nuget FParsec
10-
nuget FSharp.Compiler.Service ~> 40.0
11-
nuget Ionide.ProjInfo.ProjectSystem ~> 0.53.0
12-
nuget Ionide.ProjInfo.FCS ~> 0.53.0
13-
nuget FSharp.Core
14-
nuget nunit
10+
nuget FSharp.Compiler.Service ~> 41.0.1
11+
nuget Ionide.ProjInfo.ProjectSystem == 0.58.0
12+
nuget Ionide.ProjInfo.FCS == 0.58.0
13+
nuget Ionide.ProjInfo == 0.58.0
14+
nuget Ionide.ProjInfo.Sln == 0.58.0
15+
nuget FSharp.Core ~> 6.0
16+
nuget nunit ~> 3.0
17+
nuget System.Reactive ~> 5
1518
nuget NUnit3TestAdapter
1619
nuget Microsoft.NET.Test.Sdk 17.7.2
1720
nuget Newtonsoft.Json
@@ -20,10 +23,10 @@ nuget Microsoft.Build.Locator
2023
# don't expose as a package reference
2124
nuget Microsoft.SourceLink.GitHub copy_local: true
2225
# don't copy runtime assets
23-
nuget Microsoft.Build.Framework copy_local: false
26+
nuget Microsoft.Build.Framework == 16.11.0 copy_local: false
2427
nuget Microsoft.Build.Tasks.Core copy_local: false
25-
nuget Microsoft.Build.Utilities.Core copy_local: false
26-
nuget Microsoft.Build copy_local: false
28+
nuget Microsoft.Build.Utilities.Core == 16.11.0 copy_local: false
29+
nuget Microsoft.Build == 16.11.0 copy_local: false
2730

2831
group Docs
2932
source https://api.nuget.org/v3/index.json
@@ -43,6 +46,9 @@ group Build
4346
storage: none
4447
strategy: min
4548

49+
nuget System.Reactive ~> 5
50+
nuget MSBuild.StructuredLogger == 2.1.815
51+
nuget FSharp.Core ~> 5.0
4652
nuget Fake.Core.Target
4753
nuget Fake.Core.Process
4854
nuget Fake.DotNet.Cli

paket.lock

Lines changed: 515 additions & 955 deletions
Large diffs are not rendered by default.

src/FSharpLint.Console/Program.fs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
open Argu
44
open System
5+
open System.IO
56
open FSharpLint.Framework
67
open FSharpLint.Application
78
open System.Reflection
@@ -141,7 +142,7 @@ let private start (arguments:ParseResults<ToolArgs>) (toolsPath:Ionide.ProjInfo.
141142

142143
/// Must be called only once per process.
143144
/// We're calling it globally so we can call main multiple times from our tests.
144-
let toolsPath = Ionide.ProjInfo.Init.init()
145+
let toolsPath = Ionide.ProjInfo.Init.init (DirectoryInfo <| Directory.GetCurrentDirectory()) None
145146

146147
[<EntryPoint>]
147148
let main argv =

src/FSharpLint.Core/Framework/AbstractSyntaxArray.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ module AbstractSyntaxArray =
9494
let private astNodeToSyntaxNode = function
9595
| Expression(SynExpr.Null(_)) -> SyntaxNode.Null
9696
| Expression(SynExpr.Tuple(_)) -> SyntaxNode.Tuple
97-
| Expression(SynExpr.ArrayOrListOfSeqExpr(_))
97+
| Expression(SynExpr.ArrayOrListComputed(_))
9898
| Expression(SynExpr.ArrayOrList(_)) -> SyntaxNode.ArrayOrList
9999
| Expression(SynExpr.AddressOf(_)) -> SyntaxNode.AddressOf
100100
| Identifier(_) -> SyntaxNode.Identifier

src/FSharpLint.Core/Framework/Ast.fs

Lines changed: 54 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ module Ast =
5757
match exprToFlatten with
5858
| SynExpr.App(_, _, x, y, _) ->
5959
match x with
60-
| SynExpr.App(_, true, SynExpr.Ident(op), rhs, _) as app ->
60+
| SynExpr.App(_, true, SynExpr.LongIdent(_, SynLongIdent([op], _, _), _, _), rhs, _) as app ->
6161
let lhs = y
6262

6363
match op.idText with
@@ -85,33 +85,33 @@ module Ast =
8585
let rec removeAutoGeneratedMatchesFromLambda = function
8686
| SynExpr.Match(DebugPointAtBinding.NoneAtInvisible,
8787
_,
88-
[SynMatchClause(SynPat.Wild(_), _, expr, _, _)], _) ->
88+
[SynMatchClause(SynPat.Wild(_), _, expr, _, _, _)], _, _) ->
8989
removeAutoGeneratedMatchesFromLambda expr
9090
| x -> x
9191

9292
let (|IsCurriedLambda|_|) = function
93-
| SynExpr.Lambda(_, _, parameter, (SynExpr.Lambda(_) as inner), _, _) as outer
93+
| SynExpr.Lambda(_, _, parameter, (SynExpr.Lambda(_) as inner), _, _, _) as outer
9494
when outer.Range = inner.Range ->
9595
Some(parameter, inner)
9696
| _ -> None
9797

9898
let rec getLambdaParametersAndExpression parameters = function
9999
| IsCurriedLambda(parameter, curriedLambda) ->
100100
getLambdaParametersAndExpression (parameter::parameters) curriedLambda
101-
| SynExpr.Lambda(_, _, parameter, body, _, _) ->
101+
| SynExpr.Lambda(_, _, parameter, body, _, _, _) ->
102102
{ Arguments = parameter::parameters |> List.rev
103103
Body = removeAutoGeneratedMatchesFromLambda body } |> Some
104104
| _ -> None
105105

106106
match lambda with
107-
| AstNode.Expression(SynExpr.Lambda(_, _, _, _, _, range) as lambda) ->
107+
| AstNode.Expression(SynExpr.Lambda(_, _, _, _, _, range, _) as lambda) ->
108108
getLambdaParametersAndExpression [] lambda
109109
|> Option.map (fun x -> (x, range))
110110
| _ -> None
111111

112112
let (|Cons|_|) pattern =
113113
match pattern with
114-
| SynPat.LongIdent(LongIdentWithDots([identifier], _),
114+
| SynPat.LongIdent(SynLongIdent([identifier], _, _),
115115
_, _,
116116
SynArgPats.Pats([SynPat.Tuple(_, [lhs; rhs], _)]), _, _)
117117
when identifier.idText = "op_ColonColon" ->
@@ -130,13 +130,13 @@ module Ast =
130130

131131
let inline private moduleDeclarationChildren node add =
132132
match node with
133-
| SynModuleDecl.NestedModule(componentInfo, _, moduleDeclarations, _, _) ->
133+
| SynModuleDecl.NestedModule(componentInfo, _, moduleDeclarations, _, _, _) ->
134134
moduleDeclarations |> List.revIter (ModuleDeclaration >> add)
135135
add <| ComponentInfo componentInfo
136136
| SynModuleDecl.Let(_, bindings, _) -> bindings |> List.revIter (Binding >> add)
137-
| SynModuleDecl.DoExpr(_, expression, _) -> add <| Expression expression
137+
| SynModuleDecl.Expr(expression, _) -> add <| Expression expression
138138
| SynModuleDecl.Types(typeDefinitions, _) -> typeDefinitions |> List.revIter (TypeDefinition >> add)
139-
| SynModuleDecl.Exception(SynExceptionDefn.SynExceptionDefn(repr, members, _), _) ->
139+
| SynModuleDecl.Exception(SynExceptionDefn.SynExceptionDefn(repr, _, members, _), _) ->
140140
members |> List.revIter (MemberDefinition >> add)
141141
add <| ExceptionRepresentation repr
142142
| SynModuleDecl.NamespaceFragment(moduleOrNamespace) -> add <| ModuleOrNamespace moduleOrNamespace
@@ -153,7 +153,7 @@ module Ast =
153153
add <| Type synType
154154
| SynType.Tuple(_, types, _) ->
155155
types |> List.revIter (snd >> Type >> add)
156-
| SynType.Fun(synType, synType1, _)
156+
| SynType.Fun(synType, synType1, _, _)
157157
| SynType.StaticConstantNamed(synType, synType1, _)
158158
| SynType.MeasureDivide(synType, synType1, _) ->
159159
add <| Type synType1
@@ -191,20 +191,23 @@ module Ast =
191191
add <| Expression expression
192192
add <| Type synType
193193
| SynMemberDefn.LetBindings(bindings, _, _, _) -> bindings |> List.revIter (Binding >> add)
194-
| SynMemberDefn.Interface(synType, Some(members), _) ->
194+
| SynMemberDefn.Interface(synType, _, Some(members), _) ->
195195
members |> List.revIter (MemberDefinition >> add)
196196
add <| Type synType
197-
| SynMemberDefn.Interface(synType, None, _)
197+
| SynMemberDefn.Interface(synType, _, None, _)
198198
| SynMemberDefn.Inherit(synType, _, _) -> add <| Type synType
199199
| SynMemberDefn.Open(_)
200200
| SynMemberDefn.AbstractSlot(_) -> ()
201201
| SynMemberDefn.ValField(field, _) -> add <| Field field
202202
| SynMemberDefn.NestedType(typeDefinition, _, _) -> add <| TypeDefinition typeDefinition
203-
| SynMemberDefn.AutoProperty(_, _, _, Some(synType), _, _, _, _, expression, _, _) ->
203+
| SynMemberDefn.AutoProperty(_, _, _, Some(synType), _, _, _, _, _, expression, _, _, _) ->
204204
add <| Expression expression
205205
add <| Type synType
206-
| SynMemberDefn.AutoProperty(_, _, _, None, _, _, _, _, expression, _, _) ->
206+
| SynMemberDefn.AutoProperty(_, _, _, None, _, _, _, _, _, expression, _, _, _) ->
207207
add <| Expression expression
208+
| SynMemberDefn.GetSetMember(memberDefnForGet, memberDefnForSet, _, _) ->
209+
memberDefnForGet |> Option.iter (Binding >> add)
210+
memberDefnForSet |> Option.iter (Binding >> add)
208211

209212
let inline private patternChildren node add =
210213
match node with
@@ -213,16 +216,16 @@ module Ast =
213216
| SynPat.Typed(pattern, synType, _) ->
214217
add <| Type synType
215218
add <| Pattern pattern
216-
| SynPat.Or(pattern, pattern1, _) ->
219+
| SynPat.Or(pattern, pattern1, _, _) ->
217220
add <| Pattern pattern1
218221
add <| Pattern pattern
219222
| SynPat.ArrayOrList(_, patterns, _)
220223
| SynPat.Tuple(_, patterns, _)
221224
| SynPat.Ands(patterns, _) -> patterns |> List.revIter (Pattern >> add)
222225
| SynPat.Attrib(pattern, _, _)
223-
| SynPat.Named(pattern, _, _, _, _)
224226
| SynPat.Paren(pattern, _) -> add <| Pattern pattern
225-
| SynPat.Record(patternsAndIdentifier, _) -> patternsAndIdentifier |> List.revIter (snd >> Pattern >> add)
227+
| SynPat.Named(_) -> ()
228+
| SynPat.Record(patternsAndIdentifier, _) -> patternsAndIdentifier |> List.revIter (fun (_, _, pattern) -> pattern |> Pattern |> add)
226229
| SynPat.Const(_)
227230
| SynPat.Wild(_)
228231
| SynPat.FromParseError(_)
@@ -235,6 +238,9 @@ module Ast =
235238
add <| Pattern lhs
236239
| SynPat.LongIdent(_, _, _, constructorArguments, _, _) ->
237240
add <| ConstructorArguments constructorArguments
241+
| SynPat.As(lhsPart, rhsPart, _) ->
242+
add <| Pattern lhsPart
243+
add <| Pattern rhsPart
238244

239245
let inline private expressionChildren node add =
240246
match node with
@@ -244,8 +250,8 @@ module Ast =
244250
| SynExpr.LongIdentSet(_, expression, _)
245251
| SynExpr.Do(expression, _)
246252
| SynExpr.Assert(expression, _)
247-
| SynExpr.CompExpr(_, _, expression, _)
248-
| SynExpr.ArrayOrListOfSeqExpr(_, expression, _)
253+
| SynExpr.ComputationExpr(_, expression, _)
254+
| SynExpr.ArrayOrListComputed(_, expression, _)
249255
| SynExpr.AddressOf(_, expression, _, _)
250256
| SynExpr.InferredDowncast(expression, _)
251257
| SynExpr.InferredUpcast(expression, _)
@@ -264,7 +270,7 @@ module Ast =
264270
| SynExpr.DotIndexedSet(expression, _, expression1, _, _, _)
265271
| SynExpr.JoinIn(expression, _, expression1, _)
266272
| SynExpr.While(_, expression, expression1, _)
267-
| SynExpr.TryFinally(expression, expression1, _, _, _)
273+
| SynExpr.TryFinally(expression, expression1, _, _, _, _)
268274
| SynExpr.Set(expression, expression1, _)
269275
| SynExpr.DotSet(expression, _, expression1, _) ->
270276
add <| Expression expression1
@@ -279,7 +285,7 @@ module Ast =
279285
| SynExpr.AnonRecd(_, Some (expr,_), _, _) ->
280286
add <| Expression expr
281287
| SynExpr.AnonRecd(_, None, _, _) -> ()
282-
| SynExpr.ObjExpr(synType, _, bindings, _, _, _) ->
288+
| SynExpr.ObjExpr(synType, _, _, bindings, _, _, _, _) ->
283289
bindings |> List.revIter (Binding >> add)
284290
add <| Type synType
285291
| SynExpr.ImplicitZero(_)
@@ -293,28 +299,28 @@ module Ast =
293299
| SynExpr.LibraryOnlyUnionCaseFieldSet(_)
294300
| SynExpr.ArbitraryAfterError(_) -> ()
295301
| SynExpr.DotNamedIndexedPropertySet(expression, _, expression1, expression2, _)
296-
| SynExpr.For(_, _, expression, _, expression1, expression2, _) ->
302+
| SynExpr.For(_, _, _, _, expression, _, expression1, expression2, _) ->
297303
add <| Expression expression2
298304
add <| Expression expression1
299305
add <| Expression expression
300-
| SynExpr.LetOrUseBang(_, _, _, pattern, rightHandSide, andBangs, leftHandSide, _) ->
306+
| SynExpr.LetOrUseBang(_, _, _, pattern, rightHandSide, andBangs, leftHandSide, _, _) ->
301307
add <| Expression rightHandSide
302308
add <| Expression leftHandSide
303309
// TODO: is the the correct way to handle the new `and!` syntax?
304-
andBangs |> List.iter (fun (_, _, _, pattern, body, _) ->
310+
andBangs |> List.iter (fun (SynExprAndBang(_, _, _, pattern, body, _, _)) ->
305311
add <| Expression body
306312
add <| Pattern pattern
307313
)
308314
add <| Pattern pattern
309-
| SynExpr.ForEach(_, _, _, pattern, expression, expression1, _) ->
315+
| SynExpr.ForEach(_, _, _, _, pattern, expression, expression1, _) ->
310316
add <| Expression expression1
311317
add <| Expression expression
312318
add <| Pattern pattern
313319
| SynExpr.MatchLambda(_, _, matchClauses, _, _) ->
314320
matchClauses |> List.revIter (Match >> add)
315-
| SynExpr.TryWith(expression, _, matchClauses, _, _, _, _)
316-
| SynExpr.MatchBang(_, expression, matchClauses, _)
317-
| SynExpr.Match(_, expression, matchClauses, _) ->
321+
| SynExpr.TryWith(expression, matchClauses, _, _, _, _)
322+
| SynExpr.MatchBang(_, expression, matchClauses, _, _)
323+
| SynExpr.Match(_, expression, matchClauses, _, _) ->
318324
matchClauses |> List.revIter (Match >> add)
319325
add <| Expression expression
320326
| SynExpr.TypeApp(expression, _, types, _, _, _, _) ->
@@ -326,11 +332,11 @@ module Ast =
326332
| SynExpr.Downcast(expression, synType, _) ->
327333
add <| Type synType
328334
add <| Expression expression
329-
| SynExpr.LetOrUse(_, _, bindings, expression, _) ->
335+
| SynExpr.LetOrUse(_, _, bindings, expression, _, _) ->
330336
add <| Expression expression
331337
bindings |> List.revIter (Binding >> add)
332338
| SynExpr.Ident(ident) -> add <| Identifier([ident.idText], ident.idRange)
333-
| SynExpr.LongIdent(_, LongIdentWithDots(ident, _), _, range) ->
339+
| SynExpr.LongIdent(_, SynLongIdent(ident, _, _), _, range) ->
334340
add <| Identifier(ident |> List.map (fun x -> x.idText), range)
335341
| SynExpr.IfThenElse(cond, body, Some(elseExpr), _, _, _, _) ->
336342
add <| Else elseExpr
@@ -351,6 +357,16 @@ module Ast =
351357
| SynExpr.Lambda(_)
352358
| SynExpr.App(_)
353359
| SynExpr.Fixed(_) -> ()
360+
| SynExpr.DebugPoint(_debugPoint, _, innerExpr) ->
361+
add <| Expression innerExpr
362+
| SynExpr.Dynamic(funcExpr, _, argExpr, _) ->
363+
add <| Expression funcExpr
364+
add <| Expression argExpr
365+
| SynExpr.IndexFromEnd(expr, _) ->
366+
add <| Expression expr
367+
| SynExpr.IndexRange(expr1, _, expr2, _, _, _) ->
368+
expr1 |> Option.iter (Expression >> add)
369+
expr2 |> Option.iter (Expression >> add)
354370

355371
let inline private typeSimpleRepresentationChildren node add =
356372
match node with
@@ -381,11 +397,11 @@ module Ast =
381397

382398
let inline private matchChildren node add =
383399
match node with
384-
| SynMatchClause(pattern, Some(expression), expression1, _, _) ->
400+
| SynMatchClause(pattern, Some(expression), expression1, _, _, _) ->
385401
add <| Expression expression1
386402
add <| Expression expression
387403
add <| Pattern pattern
388-
| SynMatchClause(pattern, None, expression1, _, _) ->
404+
| SynMatchClause(pattern, None, expression1, _, _, _) ->
389405
add <| Expression expression1
390406
add <| Pattern pattern
391407

@@ -394,7 +410,7 @@ module Ast =
394410
| SynArgPats.Pats(patterns) ->
395411
patterns |> List.revIter (Pattern >> add)
396412
| SynArgPats.NamePatPairs(namePatterns, _) ->
397-
namePatterns |> List.revIter (snd >> Pattern >> add)
413+
namePatterns |> List.revIter (fun (_, _, pattern) -> pattern |> Pattern |> add)
398414

399415
let inline private typeRepresentationChildren node add =
400416
match node with
@@ -416,14 +432,14 @@ module Ast =
416432
let traverseNode node add =
417433
match node with
418434
| ModuleDeclaration(x) -> moduleDeclarationChildren x add
419-
| ModuleOrNamespace(SynModuleOrNamespace(_, _, _, moduleDeclarations, _, _, _, _)) ->
435+
| ModuleOrNamespace(SynModuleOrNamespace(_, _, _, moduleDeclarations, _, _, _, _, _)) ->
420436
moduleDeclarations |> List.revIter (ModuleDeclaration >> add)
421-
| Binding(SynBinding(_, _, _, _, _, _, _, pattern, _, expression, _, _)) ->
437+
| Binding(SynBinding(_, _, _, _, _, _, _, pattern, _, expression, _, _, _)) ->
422438
add <| Expression expression
423439
add <| Pattern pattern
424440
| ExceptionRepresentation(SynExceptionDefnRepr.SynExceptionDefnRepr(_, unionCase, _, _, _, _)) ->
425441
add <| UnionCase unionCase
426-
| TypeDefinition(SynTypeDefn(componentInfo, typeRepresentation, members, implicitCtor, _)) ->
442+
| TypeDefinition(SynTypeDefn(componentInfo, typeRepresentation, members, implicitCtor, _, _)) ->
427443
implicitCtor |> Option.iter (MemberDefinition >> add)
428444
members |> List.revIter (MemberDefinition >> add)
429445
add <| TypeRepresentation typeRepresentation
@@ -438,7 +454,7 @@ module Ast =
438454
| SimplePattern(x) -> simplePatternChildren x add
439455
| LambdaArg(x)
440456
| SimplePatterns(x) -> simplePatternsChildren x add
441-
| InterfaceImplementation(SynInterfaceImpl(synType, bindings, _)) ->
457+
| InterfaceImplementation(SynInterfaceImpl(synType, _, bindings, _, _)) ->
442458
bindings |> List.revIter (Binding >> add)
443459
add <| Type synType
444460
| TypeRepresentation(x) -> typeRepresentationChildren x add
@@ -451,7 +467,7 @@ module Ast =
451467
| Else(x)
452468
| Expression(x) -> expressionChildren x add
453469

454-
| File(ParsedInput.ImplFile(ParsedImplFileInput(_, _, _, _, _, moduleOrNamespaces, _))) ->
470+
| File(ParsedInput.ImplFile(ParsedImplFileInput(_, _, _, _, _, moduleOrNamespaces, _, _))) ->
455471
moduleOrNamespaces |> List.revIter (ModuleOrNamespace >> add)
456472

457473
| UnionCase(x) -> unionCaseChildren x add

src/FSharpLint.Core/Framework/Utilities.fs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ module ExpressionUtilities =
3131

3232
let (|Identifier|_|) = function
3333
| SynExpr.Ident(ident) -> Some([ident], ident.idRange)
34-
| SynExpr.LongIdent(_, longIdent, _, _) -> Some(longIdent.Lid, longIdent.Range)
34+
| SynExpr.LongIdent(_, longIdent, _, _) -> Some(longIdent.LongIdent, longIdent.Range)
3535
| _ -> None
3636

3737
let getSymbolFromIdent (checkFile:FSharpCheckFileResults option) expr =
@@ -52,7 +52,11 @@ module ExpressionUtilities =
5252
PrettyNaming.DecompileOpName ident.idText
5353
else ident.idText
5454

55-
let identAsCompiledOpName = PrettyNaming.CompileOpName
55+
let identAsCompiledOpName (identName: string) =
56+
if PrettyNaming.IsOperatorDisplayName identName then
57+
PrettyNaming.CompileOpName identName
58+
else
59+
identName
5660

5761
/// Extracts an expression from parentheses e.g. ((x + 4)) -> x + 4
5862
let rec removeParens = function
@@ -76,8 +80,8 @@ module ExpressionUtilities =
7680
lid |> List.map (fun li -> li.idText) |> String.concat "."
7781

7882
/// Converts a LongIdentWithDots to a String.
79-
let longIdentWithDotsToString (lidwd:LongIdentWithDots) =
80-
lidwd.Lid |> longIdentToString
83+
let longIdentWithDotsToString (lidwd: SynLongIdent) =
84+
lidwd.LongIdent |> longIdentToString
8185

8286
/// Tries to find the source code within a given range.
8387
let tryFindTextOfRange (range:Range) (text:string) =

0 commit comments

Comments
 (0)