Skip to content

Commit 6da74cb

Browse files
committed
[WIP] FCS 43.10
1 parent ecb10e9 commit 6da74cb

File tree

13 files changed

+43
-28
lines changed

13 files changed

+43
-28
lines changed

Directory.Packages.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
<PackageVersion Include="BenchmarkDotNet" Version="0.15.2" />
99
<PackageVersion Include="BenchmarkDotNet.Diagnostics.Windows" Version="0.15.2" />
1010
<PackageVersion Include="FParsec" Version="1.1.1" />
11-
<PackageVersion Include="FSharp.Compiler.Service" Version="43.9.201" />
11+
<PackageVersion Include="FSharp.Compiler.Service" Version="43.10.100" />
1212
<PackageVersion Include="FSharp.Control.Reactive" Version="6.1.2" />
13-
<PackageVersion Include="FSharp.Core" Version="9.0.201" />
13+
<PackageVersion Include="FSharp.Core" Version="10.0.100" />
1414
<PackageVersion Include="Ionide.ProjInfo.ProjectSystem" Version="0.70.2" />
1515
<PackageVersion Include="Ionide.ProjInfo.FCS" Version="0.70.2" />
1616
<PackageVersion Include="Ionide.ProjInfo" Version="0.70.2" />

src/FSharpLint.Core/Framework/Ast.fs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ module Ast =
237237
| SynPat.Attrib(pattern, _, _)
238238
| SynPat.Paren(pattern, _) -> add <| Pattern pattern
239239
| SynPat.Named(_) -> ()
240-
| SynPat.Record(patternsAndIdentifier, _) -> List.revIter (fun (_, _, pattern) -> pattern |> Pattern |> add) patternsAndIdentifier
240+
| SynPat.Record(patPairFieldList, _) -> patPairFieldList |> List.revIter(_.Pattern >> Pattern >> add)
241241
| SynPat.Const(_)
242242
| SynPat.Wild(_)
243243
| SynPat.FromParseError(_)
@@ -303,13 +303,6 @@ module Ast =
303303
| SynExpr.DotNamedIndexedPropertySet(expression, _, expression1, expression2, _)
304304
| SynExpr.For(_, _, _, _, expression, _, expression1, expression2, _) ->
305305
addMany [Expression expression2; Expression expression1; Expression expression]
306-
| SynExpr.LetOrUseBang(_, _, _, pattern, rightHandSide, andBangs, leftHandSide, _, _) ->
307-
addMany [Expression rightHandSide; Expression leftHandSide]
308-
// TODO: is the the correct way to handle the new `and!` syntax?
309-
List.iter (fun (SynExprAndBang(_, _, _, pattern, body, _, _)) ->
310-
addMany [Expression body; Pattern pattern]
311-
) andBangs
312-
add <| Pattern pattern
313306
| SynExpr.ForEach(_, _, _, _, pattern, expression, expression1, _) ->
314307
addMany [Expression expression1; Expression expression; Pattern pattern]
315308
| SynExpr.MatchLambda(_, _, matchClauses, _, _) ->
@@ -327,9 +320,22 @@ module Ast =
327320
| SynExpr.Upcast(expression, synType, _)
328321
| SynExpr.Downcast(expression, synType, _) ->
329322
addMany [Type synType; Expression expression]
330-
| SynExpr.LetOrUse(_, _, bindings, expression, _, _) ->
323+
// regular let or use
324+
| SynExpr.LetOrUse(_, _, _, false, bindings, expression, _, _) ->
331325
add <| Expression expression
332326
List.revIter (Binding >> add) bindings
327+
// let! or use!
328+
| SynExpr.LetOrUse(_, _, _, true, bindings, leftHandSide, _, _) ->
329+
match bindings with
330+
| firstBinding :: andBangs ->
331+
match firstBinding with
332+
| SynBinding(headPat = pattern; expr = rightHandSide) ->
333+
addMany [Expression rightHandSide; Expression leftHandSide]
334+
List.iter (fun (SynBinding(headPat = pattern; expr = body)) ->
335+
addMany [Expression body; Pattern pattern]
336+
) andBangs
337+
add <| Pattern pattern
338+
| [] -> () // error case. @@TODO@@ any other handling needed here?
333339
| SynExpr.Ident(ident) -> add <| Identifier([ident.idText], ident.idRange)
334340
| SynExpr.LongIdent(_, SynLongIdent(ident, _, _), _, range) ->
335341
add <| Identifier(List.map (fun (identifier: Ident) -> identifier.idText) ident, range)
@@ -414,7 +420,7 @@ module Ast =
414420
| SynArgPats.Pats(patterns) ->
415421
patterns |> List.revIter (Pattern >> add)
416422
| SynArgPats.NamePatPairs(namePatterns, _, _) ->
417-
namePatterns |> List.revIter (fun (_, _, pattern) -> pattern |> Pattern |> add)
423+
namePatterns |> List.revIter (_.Pattern >> Pattern >> add)
418424

419425
let inline private typeRepresentationChildren node add =
420426
match node with
@@ -471,7 +477,7 @@ module Ast =
471477
| Else(expression)
472478
| Expression(expression) -> expressionChildren expression add
473479

474-
| File(ParsedInput.ImplFile(ParsedImplFileInput(_, _, _, _, _, moduleOrNamespaces, _, _, _))) ->
480+
| File(ParsedInput.ImplFile(ParsedImplFileInput(contents = moduleOrNamespaces))) ->
475481
moduleOrNamespaces |> List.revIter (ModuleOrNamespace >> add)
476482

477483
| UnionCase(unionCase) -> unionCaseChildren unionCase add

src/FSharpLint.Core/Rules/Conventions/AsyncExceptionWithoutReturn.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ let rec checkExpression (expression: SynExpr) (range: range) (continuation: unit
5555
}
5656
| SynExpr.App (_, _, funcExpr, _, range) ->
5757
checkExpression funcExpr range returnEmptyArray
58-
| SynExpr.LetOrUse (_, _, _, body, range, _) ->
58+
| SynExpr.LetOrUse (_, _, _, false, _, body, range, _) ->
5959
checkExpression body range returnEmptyArray
6060
| _ -> Array.empty)
6161
(continuation ())

src/FSharpLint.Core/Rules/Conventions/AvoidTooShortNames.fs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,10 @@ let private getParameterWithBelowMinimumLength (pats: SynPat list): (Ident * str
5454

5555
let private getIdentifiers (args:AstNodeRuleParams) =
5656
match args.AstNode with
57-
| AstNode.Expression(SynExpr.LetOrUseBang(_, _, _, pat, _, _, _, _, _)) ->
58-
getParameterWithBelowMinimumLength [pat]
57+
| AstNode.Expression(SynExpr.LetOrUse(isBang = true; bindings = binding :: _)) ->
58+
match binding with
59+
| SynBinding(headPat = pat) ->
60+
getParameterWithBelowMinimumLength [pat]
5961
| AstNode.Expression(SynExpr.Lambda(_, _, lambdaArgs, _, _, _, _)) ->
6062
let lambdaIdent = FunctionReimplementation.getLambdaParamIdent lambdaArgs
6163
match lambdaIdent with

src/FSharpLint.Core/Rules/Conventions/Binding/BindingHelper.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ let isLetBinding index (syntaxArray:AbstractSyntaxArray.Node []) =
88
if index > 0 then
99
match syntaxArray.[syntaxArray.[index].ParentIndex].Actual with
1010
| AstNode.ModuleDeclaration(SynModuleDecl.Let(_))
11-
| AstNode.Expression(SynExpr.LetOrUse(_, false, _, _, _, _)) -> true
11+
| AstNode.Expression(SynExpr.LetOrUse(_, false, _, false, _, _, _, _)) -> true
1212
| _ -> false
1313
else false

src/FSharpLint.Core/Rules/Conventions/Binding/FavourIgnoreOverLetWild.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ let private runner (args:AstNodeRuleParams) =
3333
let bindingRange =
3434
match args.GetParents(args.NodeIndex) with
3535
| AstNode.ModuleDeclaration(SynModuleDecl.Let(_, _, range)) :: _
36-
| AstNode.Expression(SynExpr.LetOrUse(_, false, _, _, range, _)) :: _ ->
36+
| AstNode.Expression(SynExpr.LetOrUse(_, false, _, false, _, _, range, _)) :: _ ->
3737
Some(range)
3838
| _ -> None
3939

src/FSharpLint.Core/Rules/Conventions/Binding/UselessBinding.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ let private runner (args:AstNodeRuleParams) =
5252
match args.GetParents(args.NodeIndex) with
5353
| AstNode.ModuleDeclaration(SynModuleDecl.Let(_, _, range)) :: _ ->
5454
Some({ FromRange = range; FromText = "let"; ToText = String.Empty })
55-
| AstNode.Expression(SynExpr.LetOrUse(_, false, _, _, range, _)) :: _ ->
55+
| AstNode.Expression(SynExpr.LetOrUse(_, false, _, false, _, _, range, _)) :: _ ->
5656
Some({ FromRange = range; FromText = "use"; ToText = String.Empty })
5757
| _ -> None
5858
match args.AstNode with

src/FSharpLint.Core/Rules/Conventions/FavourNonMutablePropertyInitialization.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ let rec private processLetBinding (instanceNames: Set<string>) (body: SynExpr) (
6464
and [<TailCall>] processExpression (expression: SynExpr) (continuation: unit -> array<WarningDetails>) : array<WarningDetails> =
6565
Array.append
6666
(match expression with
67-
| SynExpr.LetOrUse(_, _, bindings, body, _, _) ->
67+
| SynExpr.LetOrUse(_, _, _, false, bindings, body, _, _) ->
6868
let instanceNames = extraFromBindings bindings List.Empty |> Set.ofList
6969
processLetBinding instanceNames body returnEmptyArray
7070
| SynExpr.Sequential(_, _, expr1, expr2, _, _) ->
@@ -74,7 +74,7 @@ and [<TailCall>] processExpression (expression: SynExpr) (continuation: unit ->
7474

7575
let runner args =
7676
match args.AstNode with
77-
| Binding(SynBinding(_, _, _, _, _, _, _, _, _, SynExpr.LetOrUse(_, _, bindings, body, _, _), _, _, _)) ->
77+
| Binding(SynBinding(_, _, _, _, _, _, _, _, _, SynExpr.LetOrUse(_, _, _, false, bindings, body, _, _), _, _, _)) ->
7878
let instanceNames = extraFromBindings bindings List.Empty |> Set.ofList
7979
processLetBinding instanceNames body returnEmptyArray
8080
| Match(SynMatchClause(_, _, expr, _, _, _)) ->

src/FSharpLint.Core/Rules/Conventions/FavourStaticEmptyFields.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ let private runner (args: AstNodeRuleParams) =
4949
| AstNode.Expression(SynExpr.Record(_, _, synExprRecordField, _)) ->
5050
let mapping =
5151
function
52-
| SynExprRecordField(_, _, expr, _) ->
52+
| SynExprRecordField(_, _, expr, _, _) ->
5353
match expr with
5454
| Some(SynExpr.ArrayOrList(isArray, [], range)) ->
5555
let emptyLiteralType = if isArray then EmptyArrayLiteral else EmptyListLiteral

src/FSharpLint.Core/Rules/Conventions/Naming/NamingHelper.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ let rec private innerGetPatternIdents<'Item> (accessibility:AccessControlLevel)
405405
idents
406406
(match args with
407407
| SynArgPats.NamePatPairs(pats, _, _) ->
408-
innerGetAllPatternIdents AccessControlLevel.Private getIdents (pats |> List.map (fun(_, _, synPat) -> synPat))
408+
innerGetAllPatternIdents AccessControlLevel.Private getIdents (pats |> List.map _.Pattern)
409409
| SynArgPats.Pats(pats) ->
410410
innerGetAllPatternIdents AccessControlLevel.Private getIdents pats)
411411
| SynPat.Named(_, _, access, _) ->

0 commit comments

Comments
 (0)