All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Happy 10 year anniversary to FSharpLint!
- Fix error linting projects that use .NET Legacy Framework #336 #657 [@su8898] & [@webwarrior-ws]
- FSharpLint.Console: show URL for each rule at summary #666 [@knocte]
- AvoidTooShortNames: fix for DU member params & lambda arguments #645 [@Mersho]
- Docs: don't swallow errors #678 [@webwarrior-ws]
- Make inline source filePath less confusing #677 #674 [@webwarrior-ws]
- Add new rule UnnecessaryRecKeyword #650 #652 #671 [@Mersho] & [@webwarrior-ws]
- TypePrefixing: new modes "Always", "Hybrid", "Never" (default: Hybrid) #661 [@knocte] & [@webwarrior-ws]
- Less hardcoding of .NET versions #659 [@knocte]
- Fix recent regression in MaxLinesIn* rules #667 [@webwarrior-ws] & [@Mersho]
- Migrate from .NET5 to .NET6 #655 #606 #604 [@Numpsy] & [@knocte] & [@webwarrior-ws]
- CI: better separation of main lane steps #654 [@knocte]
- A new rule that deters from using underscore-prefixed elements #643 #573 #591 [@tehraninasab] & [@webwarrior-ws]
- CI: don't push pre-releases for release notes commits. #647 [@knocte]
- Ignore empty lines and comments when counting number of lines #644 #634 [@Mersho] & [@webwarrior-ws]
- AvoidSinglePipeOperator: fix false positive #640 [@webwarrior-ws]
- CI: improve preRelease version numbers #642 [@knocte]
- AvoidTooShortNames: fix false negative #639 [@Mersho] & [@webwarrior-ws]
- CI: faster publish&docs pipelines thanks to Linux #641 [@knocte]
- Add new rules NestedFunctionNames and UnnestedFunctionNames #564 [@su8898] & [@webwarrior-ws]
- Addressed regression in the docs CI deploy [@knocte]
- Move docs CI to main CI (to detect problems earlier next time) #636 [@knocte]
- Add new rule SuggestUseAutoProperty #625 #596 [@webwarrior-ws]
- AvoidTooShortNames: fix false negatives and improve warning positions #633 #632 [@Mersho] & [@webwarrior-ws]
- FavourStaticEmptyFields: properly advise Array.empty instead of List.Empty #631 #630 [@webwarrior-ws]
- CI: publish prerelease nuget versions for every commit #629 [@knocte]
- CI: run FSharpLint on itself #609 #628 [@Mersho]
- Add new rule AsyncExceptionWithoutReturn #623 #597 [@Mersho]
- FailwithBadUsage: extern declarations bugfix #562 #561 [@webwarrior-ws]
- HintMatcher: fix potential crash #608 #341 [@Thorium]
- CI: upgrade the 'setup-dotnet' action #614 [@Numpsy]
- Additional improvements to docs and CI [@knocte]
- FSharpLint.Console: add --version #612 #611 [@Thorium]
- gitignore: add the BenchmarkDotNet artifacts folder #619 [@Numpsy]
- CI: remove redundant .NET install #624 [@knocte]
- Add new rule AvoidSinglePipeOperator #595 [@tehraninasab]
- AvoidTooShortNames: fix false negative (generic type names) #622 [@Mersho]
- Remove recursive dependency #569 [@knocte]
- Conventions/Naming: refactoring #571 [@webwarrior-ws]
- Paket: use Packages storage #615 [@Numpsy]
- Fix VS2022 build #613 [@Thorium]
- Dotnet version SDK to allow minor version difference fwd #607 [@Thorium]
- docs: fix Shortcuts typo in the menu #584 [@pirrmann]
- Fix false negatives in AvoidTooShortNames #548 [@janus]
- Fix cyclomatic complexity yielding redundant messages #559 #579 [@davidtgillard]
- Refactoring: rename DU #565 [@webwarrior-ws]
- Add new rule FavourStaticEmptyFields #530 [@janus]
- Fix false negative in GenericTypesNames #551 #552 [@janus]
- Fix GenericTypesNames not honoring configuation #552 [@janus]
- Stop ignoring errors when parsing fsharplint.json #550 #553 [@janus]
- Fix false negative in RedundantNewKeyword #555 #556 [@janus]
- Fix for false positive in FailwithBadUsage #539 [@janus]
- FavourConsistentThis: fix some false positives and add unit tests for them [@janus]
- NoPartialFunctions: detect instance members Option.Value, Map.Item, List.Head & List.Item [@su8898]
- Cover more scenarios in FailwithBadUsage [@janus]
- Add new rule AvoidTooShortNames [@janus]
- Add missing config setting hooks for recently added rules [@janus]
- Add new rule FailwithBadUsage [@su8898]
- Add new rule FavourReRaise [@su8898]
- Enable running tool on .Net 6 [@Cheroukee]
- Added cyclomatic complexity rule [@davidtgillard]
- Added FavourTypedIgnore rule [@su8898]
- Added GenericTypesNames rule [@su8898]
- Fix NonPublicValues' setting backwards compatiblity. [@aarani]
- Separate non public values naming rule into two rules (internal and private). [@knocte] & [@su8898]
- Fix for extern function naming #487
- Doc update - configuration file info.
- Update to FCS 40 [@baronfel]
- Update to FCS 39 [@baronfel]
- Consumers of the API will now need to call
Ionide.ProjInfo.Init.init()
, see the FSharpLint.Console project within this repo for an example.
- Consumers of the API will now need to call
- Update docs.
- Added new rule
NoPartialFunctions (FL0066)
.
- Fix for records being counted as a nested statement #464 [@davidtgillard]
- Update to FCS 38 [@baronfel]
- Update to .Net 5 [@baronfel]
- Update navigation in docs.
- Update docs to fix broken links.
- Update docs to support https.
- Load config from
fsharplint.json
by default.
- Fix RecordFieldNames rule incorrectly checking Union Case fields
- Use
Dotnet.ProjInfo.Workspace
to load project info.
- Update FCS to 36.0.1 [@baronfel]
- Check record fields in TypedItemSpacing rule
- Fixes for issues in Indentation rule
- Fixes for exceptional indentation cases
- .NET Core 3.1 support [@milbrandt]
- Performance optimizations
- Handle exceptional cases for indentation rule
- Fix issue with active pattern naming rule running against measure types
- Update FCS to 35 [@baronfel]
- Fix for suppression comment parsing
- Remove support for multiple overriding configs
- Update FCS to 34.0.1 [@baronfel]
- Use structured comments for warning suppression
- Use Argu library for command line argument parsing
- Add
-format
flag to specify output format (standard or MSBuild).
- Return non-zero error code when there are lint warnings
- Fix linting of solution in non-Windows systems
- Pass release configuration to dotnet proj info
- Add
-c
flag for specifying MSBuild release configuration
- Update FCS to 33.0 [@baronfel]
- Addressed issue: fsprojects#367 [@jrr]
- Update FCS to 32.0 [@Krzysztof-Cieslak]
- Update FCS to 31.0 [@baronfel]
- Add API to convert XmlConfiguration to new config type [@milbrandt]
- Ignore active patterns in PublicValues naming conventions rule
- Update FCS to 30.0 [@baronfel]
- Use Newtonsoft.Json for config parsing
- Implement linting of all projects in solution using
-sol
flag, or programmatically usinglintSolution
function - Return non-zero exit code if lint warnings exist
- Fix bug in converting XML config with no hints defined
- Add
XmlConfiguration.tryLoadConfigurationForProject
to support backwards compatability in external applications
- Update
FSharp.Compiler.Service
- Fix issue in loading default configuration
- Add ability to disable previously defined hints
- Ignore members implementing interface when checking member naming
- Change config from XML to JSON
- Refactor and redesign linter internals
- Fixed bug: fsprojects#323 by jgardella
- Update
FSharp.Compiler.Service
, by enricosada
- Fixed bug: fsprojects#304
- Update
FSharp.Compiler.Service
- Update
FSharp.Compiler.Service
, by baronfel
- Improve tuple item spacing check, by jgardella
- Ignore pattern matching in function parameters, by jgardella
- Fix using FSharpLint.Core targeting
net
, by enricosada - Fix match indentation calculation, by jgardella
- Produce tuple type string correctly, by jgardella
- Fix false positive for tuple instantiation with cons operator, by jgardella
- Take comments into account when checking spacing, by jgardella
- Update configuration defaults to exclude formatting rules for now.
- API C# interop, thanks to @jgardella
- Fix guard indentation in FormattingMatchExpressionIndentation rule, thanks to @jgardella
- Command line interface improvements.
- Pack console application as tool.
- Move solution to dotnet core.
- Fixed fsprojects#256 by @SteveGilham
- Fixed fsprojects#252 by @SteveGilham
- .net standard 2.0 support, thanks to @enricosada
- .net standard 2.0 support, thanks to @enricosada
- Fixed fsprojects#240
- Updated
FSharp.Compiler.Service
- Fixed fsprojects#237
- Fixed fsprojects#229
- Fixed fsprojects#227
- Updated
FSharp.Compiler.Service
- Updated
FSharp.Compiler.Service
- Updated
FSharp.Compiler.Service
- Updated
FSharp.Compiler.Service
- Updated
FSharp.Compiler.Service
- Added suggestion for redundant usages of the
new
keyword.
- Type checks performed at end of lint in parallel
- Linter now cancellable.
- Updated
FSharp.Compiler.Service
- New hints by @ErikSchierboom
- Updated
FSharp.Compiler.Service
- Improved performance of naming analyser.
- Added suggested fixes for naming rules.
- New hint by @smoothdeveloper: fsprojects#207
- Naming rules now customisable thanks to @Krzysztof-Cieslak.
- Introduced automated fix information to API.
- Fixed bug: fsprojects#191
- Bug fixed by @rexcfnghk: fsprojects#189
- Updated FSharp.Compiler.Service
- Fixed bug: fsprojects#184
- Updated wording of warnings.
- Disabled
RecordFieldNamesMustBePascalCase
naming rule by default.
- Included FSharp.Core.sigdata and FSharp.Core.optdata in the FSharpLint.MSBuild package.
- Bug fixed by @Krzysztof-Cieslak: fsprojects#172
- Added missing app.config file to FSharpLint.MSBuild package
- Run linter in separate AppDomain in MSBuild package so that we can add binding redirects to get the correct version of FSharp.Core
- Fixed structure of FSharpLint.MSBuild package
- Updated FSharp.Compiler.Service
- Fixed name convention bug which warned for DU names inside patterns.
- Added required project cracker files to FSharpLint.Fake package.
- Updated FSharp.Compiler.Service
- Brought back configuration manager api.
- Targets FSharp.Core 4.4.0.0
- Added initial dotnet core support.
- Improved overall performance of linter.
- Updated default configuration to have opinionated rules off by default.
- Fixed bug: fsprojects#126
- Fixed bug: fsprojects#125
- Added feature - now able to write a message as a suggestion in hints: fsprojects#117
- Added feature - nulls can now be matched against in hints: https://github.com/fsprojects/FSharpLint/commit/89050c3bc6020477b3b9d50a4ce541aa09b9a270
- Fixed bug - lambda length warnings would be repeated for each argument: https://github.com/fsprojects/FSharpLint/commit/bc49dd6d58ebbbe8f2cdb4857e011fcaf14d9982
- Enhancement - display operators as symbols in eta reduction suggestions: https://github.com/fsprojects/FSharpLint/commit/1b2f115e71b560ccf8019ef5f14df79f0fd62201
- Enhancement - updated warning messages: https://github.com/fsprojects/FSharpLint/commit/49e579ca35de70902def6bb30835593140be7abd
- Partially fixed bug (fixed when type checking enabled): fsprojects#113
- Partially fixed bug (fixed when type checking enabled): fsprojects#109
- Configuration can now be written back to XML.
- Configuration API updated to provide management of configuration files.
- Fixed bug: fsprojects#108
Default
property now static: fsprojects#107
- FSharp.Core.dll is now included again
- Fixed bug: fsprojects#101
- Fixed bug: fsprojects#100
- Fixed bug: fsprojects#99
- Fixed bug: fsprojects#103
- Fixed bug: fsprojects#98
- Fixed bug: fsprojects#97
- XmlDoc rules now configurable to apply to code with certain access levels e.g. private or public. Thanks goes to Jon Hamm for implementing this feature
- Included FSharp.Core
- Fixed bug where hints would accidentally match named parameters and property initialisers
- Configuration has been updated to be simpler and verifiable via an XSD.
- Type checking is now optional and off by default to speed up the linting.
- More XML documentation rules have been added thanks to jhamm
- Files can now be ignored by specifying git ignore like globs in the configuration file.
- Fixed bug: fsprojects#78
- Fixed bug: fsprojects#90
- Handling of project files is now performed by FSharp.Compiler.Service
- Added
Enabled
config option to all analysers.
- Added a new rule
CanBeReplacedWithComposition
to theFSharpLint.FunctionReimplementation
analyser: http://fsprojects.github.io/FSharpLint/FSharpLint.FunctionReimplementation.html - Fixed bug: fsprojects#63
- Fixed bug: fsprojects#63
- Fixed bug: fsprojects#57
- Files can now be ignored via the .fsproj file: fsprojects#55
- FAKE task now reports on how many files were linted and how many warnings were found.
- FAKE task now includes more detailed information on failure.
- FAKE task now includes an option to fail the build if any warnings are found.
- Fixed bug: fsprojects#57
- FSharp.Compiler.Service now included as a strongly named assembly.
- TargetFrameworkVersion now taken from the project file: fsprojects#52
- Dropped MSBuild tools back down from 12 to 4 to support VS2010
- Updated
FSharp.Compiler.Service
for compatibility with VisualFSharpPowerTools: fsprojects#51
- FSharp.Core lookup now supports F# 4, the package is now a single click install in VS 2015 preview
- Added support for SuppressMessageAttribute for the Typography analyser
- Fixed bug: fsprojects#48
- Fixed bug: fsprojects#47
- Attempted to fix assembly resolution issues by including FParsec built against FSharp.Core 4.3.0.0
- Added FAKE task to the nuget package
- Added
FSharpLint.Binding.TupleOfWildcards
rule - Fixed bug: fsprojects#38
- Added support for
SuppressMessageAttribute
for all analysers exceptFSharpLint.Typography
- Added FAKE task, thanks to @archaeron for this contribution
- Fixed bug: fsprojects#36
- Implemented new analyser:
FSharpLint.RaiseWithTooManyArguments
- Implemented new rule:
FSharpLint.Binding.WildcardNamedWithAsPattern
- More hints and support added for matching if statements, tuples, lists, array, and patterns with hints
- Fixed bug: literals in pattern matches were generating lint warnings saying that they should be camel case, whereas they must be pascal case.
- First release