git.iko.soy/rowtype-yoga/purslint
on main help sign in
136 files changed+1448−1136
since splitsnapshots
unifiedsplit
.github/ISSUE_TEMPLATE/bug_report.yml+53 .github/workflows/publish-npm.yml+27 .github/workflows/publish-openvsx.yml+29 .github/workflows/publish-vscode.yml+26 CONTRIBUTING.md+6 LICENSE+21 README.md+93−80 bin/purelint-cli/src/Main.purs−374 bin/purelint-lsp.js−3 bin/purelint.js−3 bin/purelint-cli/spago.yaml → bin/purslint-cli/spago.yaml+3−2 bin/purslint-cli/src/Main.purs+419 bin/purelint-cli/src/Node/CLI.js → bin/purslint-cli/src/Node/CLI.js bin/purelint-cli/src/Node/CLI.purs → bin/purslint-cli/src/Node/CLI.purs bin/purelint-cli/src/Node/FS/Simple.js → bin/purslint-cli/src/Node/FS/Simple.js bin/purelint-cli/src/Node/FS/Simple.purs → bin/purslint-cli/src/Node/FS/Simple.purs bin/purslint-lsp.js+2 bin/purelint-lsp/spago.yaml → bin/purslint-lsp/spago.yaml+2−2 bin/purelint-lsp/src/LSP.js → bin/purslint-lsp/src/LSP.js+1−1 bin/purelint-lsp/src/LSP.purs → bin/purslint-lsp/src/LSP.purs+104−104 bin/purelint-lsp/src/LSP/Stdio.js → bin/purslint-lsp/src/LSP/Stdio.js+1−1 bin/purelint-lsp/src/LSP/Stdio.purs → bin/purslint-lsp/src/LSP/Stdio.purs bin/purelint-lsp/src/Main.purs → bin/purslint-lsp/src/Main.purs+1−1 bin/purslint.js+2 demo.gif docs/IMPORT_CHECKING_PLAN.md+8−8 lib/purelint/spago.yaml → lib/purslint/spago.yaml+1−1 lib/purelint/src/Purelint/Config.purs → lib/purslint/src/Purslint/Config.purs+2−2 lib/purelint/src/Purelint/Fix.purs → lib/purslint/src/Purslint/Fix.purs+15−12 lib/purelint/src/Purelint/ImportFix.purs → lib/purslint/src/Purslint/ImportFix.purs+1−1 lib/purelint/src/Purelint/Imports.purs → lib/purslint/src/Purslint/Imports.purs+1−1 lib/purelint/src/Purelint/Print.purs → lib/purslint/src/Purslint/Print.purs+1−1 lib/purelint/src/Purelint/Rule.purs → lib/purslint/src/Purslint/Rule.purs+3−3 lib/purelint/src/Purelint/Rules/AlternativeLaw.purs → lib/purslint/src/Purslint/Rules/AlternativeLaw.purs+5−5 lib/purelint/src/Purelint/Rules/BooleanSimplify.purs → lib/purslint/src/Purslint/Rules/BooleanSimplify.purs+5−5 lib/purelint/src/Purelint/Rules/CollapseLambdas.purs → lib/purslint/src/Purslint/Rules/CollapseLambdas.purs+4−4 lib/purelint/src/Purelint/Rules/ConcatMap.purs → lib/purslint/src/Purslint/Rules/ConcatMap.purs+5−5 lib/purelint/src/Purelint/Rules/EtaReduce.purs → lib/purslint/src/Purslint/Rules/EtaReduce.purs+4−4 lib/purelint/src/Purelint/Rules/EtaReduceDecl.purs → lib/purslint/src/Purslint/Rules/EtaReduceDecl.purs+4−4 lib/purelint/src/Purelint/Rules/EvaluateBool.purs → lib/purslint/src/Purslint/Rules/EvaluateBool.purs+5−5 lib/purelint/src/Purelint/Rules/EvaluateConst.purs → lib/purslint/src/Purslint/Rules/EvaluateConst.purs+5−5 lib/purelint/src/Purelint/Rules/EvaluateEither.purs → lib/purslint/src/Purslint/Rules/EvaluateEither.purs+5−5 lib/purelint/src/Purelint/Rules/EvaluateFst.purs → lib/purslint/src/Purslint/Rules/EvaluateFst.purs+5−5 lib/purelint/src/Purelint/Rules/FlattenCase.purs → lib/purslint/src/Purslint/Rules/FlattenCase.purs+4−4 lib/purelint/src/Purelint/Rules/FunctorLaw.purs → lib/purslint/src/Purslint/Rules/FunctorLaw.purs+5−5 lib/purelint/src/Purelint/Rules/LetToDo.purs → lib/purslint/src/Purslint/Rules/LetToDo.purs+3−3 lib/purelint/src/Purelint/Rules/LetToWhere.purs → lib/purslint/src/Purslint/Rules/LetToWhere.purs+3−3 lib/purelint/src/Purelint/Rules/MapFusion.purs → lib/purslint/src/Purslint/Rules/MapFusion.purs+5−5 lib/purelint/src/Purelint/Rules/MapIdentity.purs → lib/purslint/src/Purslint/Rules/MapIdentity.purs+5−5 lib/purelint/src/Purelint/Rules/MonadLaw.purs → lib/purslint/src/Purslint/Rules/MonadLaw.purs+5−5 lib/purelint/src/Purelint/Rules/MonoidIdentity.purs → lib/purslint/src/Purslint/Rules/MonoidIdentity.purs+5−5 lib/purelint/src/Purelint/Rules/NotEqual.purs → lib/purslint/src/Purslint/Rules/NotEqual.purs+5−5 lib/purelint/src/Purelint/Rules/NothingBind.purs → lib/purslint/src/Purslint/Rules/NothingBind.purs+4−4 lib/purelint/src/Purelint/Rules/RedundantBind.purs → lib/purslint/src/Purslint/Rules/RedundantBind.purs+5−5 lib/purelint/src/Purelint/Rules/RedundantFlip.purs → lib/purslint/src/Purslint/Rules/RedundantFlip.purs+5−5 lib/purelint/src/Purelint/Rules/RedundantGuard.purs → lib/purslint/src/Purslint/Rules/RedundantGuard.purs+4−4 lib/purelint/src/Purelint/Rules/RedundantId.purs → lib/purslint/src/Purslint/Rules/RedundantId.purs+5−5 lib/purelint/src/Purelint/Rules/RedundantIf.purs → lib/purslint/src/Purslint/Rules/RedundantIf.purs+5−5 lib/purelint/src/Purelint/Rules/RedundantNegate.purs → lib/purslint/src/Purslint/Rules/RedundantNegate.purs+5−5 lib/purelint/src/Purelint/Rules/RedundantNot.purs → lib/purslint/src/Purslint/Rules/RedundantNot.purs+5−5 lib/purelint/src/Purelint/Rules/RedundantParens.purs → lib/purslint/src/Purslint/Rules/RedundantParens.purs+4−4 lib/purelint/src/Purelint/Rules/RedundantReverse.purs → lib/purslint/src/Purslint/Rules/RedundantReverse.purs+5−5 lib/purelint/src/Purelint/Rules/UnlessNot.purs → lib/purslint/src/Purslint/Rules/UnlessNot.purs+5−5 lib/purelint/src/Purelint/Rules/UseAll.purs → lib/purslint/src/Purslint/Rules/UseAll.purs+5−5 lib/purelint/src/Purelint/Rules/UseAnd.purs → lib/purslint/src/Purslint/Rules/UseAnd.purs+5−5 lib/purelint/src/Purelint/Rules/UseAny.purs → lib/purslint/src/Purslint/Rules/UseAny.purs+5−5 lib/purelint/src/Purelint/Rules/UseApplicative.purs → lib/purslint/src/Purslint/Rules/UseApplicative.purs+5−5 lib/purelint/src/Purelint/Rules/UseApplyFlipped.purs → lib/purslint/src/Purslint/Rules/UseApplyFlipped.purs+4−4 lib/purelint/src/Purelint/Rules/UseBimap.purs → lib/purslint/src/Purslint/Rules/UseBimap.purs+5−5 lib/purelint/src/Purelint/Rules/UseBindFlip.purs → lib/purslint/src/Purslint/Rules/UseBindFlip.purs+5−5 lib/purelint/src/Purelint/Rules/UseBreak.purs → lib/purslint/src/Purslint/Rules/UseBreak.purs+5−5 lib/purelint/src/Purelint/Rules/UseCaseOf.purs → lib/purslint/src/Purslint/Rules/UseCaseOf.purs+4−4 lib/purelint/src/Purelint/Rules/UseComparing.purs → lib/purslint/src/Purslint/Rules/UseComparing.purs+5−5 lib/purelint/src/Purelint/Rules/UseConst.purs → lib/purslint/src/Purslint/Rules/UseConst.purs+5−5 lib/purelint/src/Purelint/Rules/UseDollar.purs → lib/purslint/src/Purslint/Rules/UseDollar.purs+4−4 lib/purelint/src/Purelint/Rules/UseEitherMap.purs → lib/purslint/src/Purslint/Rules/UseEitherMap.purs+5−5 lib/purelint/src/Purelint/Rules/UseElemIndex.purs → lib/purslint/src/Purslint/Rules/UseElemIndex.purs+5−5 lib/purelint/src/Purelint/Rules/UseFindMap.purs → lib/purslint/src/Purslint/Rules/UseFindMap.purs+5−5 lib/purelint/src/Purelint/Rules/UseFold.purs → lib/purslint/src/Purslint/Rules/UseFold.purs+4−4 lib/purelint/src/Purelint/Rules/UseFoldBool.purs → lib/purslint/src/Purslint/Rules/UseFoldBool.purs+4−4 lib/purelint/src/Purelint/Rules/UseFoldMap.purs → lib/purslint/src/Purslint/Rules/UseFoldMap.purs+4−4 lib/purelint/src/Purelint/Rules/UseFoldMapId.purs → lib/purslint/src/Purslint/Rules/UseFoldMapId.purs+5−5 lib/purelint/src/Purelint/Rules/UseFor.purs → lib/purslint/src/Purslint/Rules/UseFor.purs+5−5 lib/purelint/src/Purelint/Rules/UseFromJust.purs → lib/purslint/src/Purslint/Rules/UseFromJust.purs+5−5 lib/purelint/src/Purelint/Rules/UseFromMaybe.purs → lib/purslint/src/Purslint/Rules/UseFromMaybe.purs+5−5 lib/purelint/src/Purelint/Rules/UseFstSnd.purs → lib/purslint/src/Purslint/Rules/UseFstSnd.purs+3−3 lib/purelint/src/Purelint/Rules/UseGuard.purs → lib/purslint/src/Purslint/Rules/UseGuard.purs+5−5 lib/purelint/src/Purelint/Rules/UseGuardMaybe.purs → lib/purslint/src/Purslint/Rules/UseGuardMaybe.purs+5−5 lib/purelint/src/Purelint/Rules/UseHead.purs → lib/purslint/src/Purslint/Rules/UseHead.purs+4−4 lib/purelint/src/Purelint/Rules/UseIsJust.purs → lib/purslint/src/Purslint/Rules/UseIsJust.purs+4−4 lib/purelint/src/Purelint/Rules/UseIsNothing.purs → lib/purslint/src/Purslint/Rules/UseIsNothing.purs+4−4 lib/purelint/src/Purelint/Rules/UseJoin.purs → lib/purslint/src/Purslint/Rules/UseJoin.purs+5−5 lib/purelint/src/Purelint/Rules/UseLastReverse.purs → lib/purslint/src/Purslint/Rules/UseLastReverse.purs+5−5 lib/purelint/src/Purelint/Rules/UseMapMaybe.purs → lib/purslint/src/Purslint/Rules/UseMapMaybe.purs+5−5 lib/purelint/src/Purelint/Rules/UseMaybeMap.purs → lib/purslint/src/Purslint/Rules/UseMaybeMap.purs+5−5 lib/purelint/src/Purelint/Rules/UseMinMax.purs → lib/purslint/src/Purslint/Rules/UseMinMax.purs+5−5 lib/purelint/src/Purelint/Rules/UseMinimumSort.purs → lib/purslint/src/Purslint/Rules/UseMinimumSort.purs+5−5 lib/purelint/src/Purelint/Rules/UseNotElem.purs → lib/purslint/src/Purslint/Rules/UseNotElem.purs+5−5 lib/purelint/src/Purelint/Rules/UseNull.purs → lib/purslint/src/Purslint/Rules/UseNull.purs+5−5 lib/purelint/src/Purelint/Rules/UseOn.purs → lib/purslint/src/Purslint/Rules/UseOn.purs+5−5 lib/purelint/src/Purelint/Rules/UseOr.purs → lib/purslint/src/Purslint/Rules/UseOr.purs+5−5 lib/purelint/src/Purelint/Rules/UsePatternGuards.purs → lib/purslint/src/Purslint/Rules/UsePatternGuards.purs+4−4 lib/purelint/src/Purelint/Rules/UseReplicate.purs → lib/purslint/src/Purslint/Rules/UseReplicate.purs+5−5 lib/purelint/src/Purelint/Rules/UseSequence.purs → lib/purslint/src/Purslint/Rules/UseSequence.purs+4−4 lib/purelint/src/Purelint/Rules/UseSpan.purs → lib/purslint/src/Purslint/Rules/UseSpan.purs+5−5 lib/purelint/src/Purelint/Rules/UseTraverse.purs → lib/purslint/src/Purslint/Rules/UseTraverse.purs+5−5 lib/purelint/src/Purelint/Rules/UseTraverseSequence.purs → lib/purslint/src/Purslint/Rules/UseTraverseSequence.purs+5−5 lib/purelint/src/Purelint/Rules/UseUncurry.purs → lib/purslint/src/Purslint/Rules/UseUncurry.purs+5−5 lib/purelint/src/Purelint/Rules/UseUnless.purs → lib/purslint/src/Purslint/Rules/UseUnless.purs+5−5 lib/purelint/src/Purelint/Rules/UseUnwrap.purs → lib/purslint/src/Purslint/Rules/UseUnwrap.purs+4−4 lib/purelint/src/Purelint/Rules/UseVoid.purs → lib/purslint/src/Purslint/Rules/UseVoid.purs+5−5 lib/purelint/src/Purelint/Rules/UseWhen.purs → lib/purslint/src/Purslint/Rules/UseWhen.purs+5−5 lib/purelint/src/Purelint/Rules/UseZip.purs → lib/purslint/src/Purslint/Rules/UseZip.purs+5−5 lib/purelint/src/Purelint/Rules/WhenNot.purs → lib/purslint/src/Purslint/Rules/WhenNot.purs+5−5 lib/purelint/src/Purelint/Runner.purs → lib/purslint/src/Purslint/Runner.purs+4−4 lib/purelint/src/Purelint/Tidy.js → lib/purslint/src/Purslint/Tidy.js lib/purelint/src/Purelint/Tidy.purs → lib/purslint/src/Purslint/Tidy.purs+1−1 lib/purelint/src/Purelint/Types.purs → lib/purslint/src/Purslint/Types.purs+1−1 package.json+13−6 purelint-lsp−2 purslint-lsp+2 spago.lock+94−13 spago.yaml+3−2 test/Test/Main.purs+88−88 vscode-extension/out/extension.js+4−4 vscode-extension/out/test/suite/extension.test.js+4−4 vscode-extension/out/test/suite/extension.test.js.map+1−1 vscode-extension/package.json+10−9 vscode-extension/purelint-0.1.0.vsix → vscode-extension/purslint-0.1.1.vsix vscode-extension/purslint.png vscode-extension/src/extension.ts+5−5 vscode-extension/src/test/suite/extension.test.ts+4−4 zed-extension/Cargo.lock+3−3 zed-extension/Cargo.toml+1−1 zed-extension/extension.toml+3−3 zed-extension/src/lib.rs+5−5
.github/ISSUE_TEMPLATE/bug_report.ymlnew file+53
@@ -0,0 +1,53 @@
1+name: Bug report
2+description: Report incorrect lint results with input and output.
3+title: "[Bug]: "
4+labels:
5+ - bug
6+body:
7+ - type: markdown
8+ attributes:
9+ value: |
10+ Thanks for taking the time to report a bug.
11+ If possible, include a golden file with input, actual output, and expected output.
12+ - type: textarea
13+ id: input
14+ attributes:
15+ label: Input
16+ description: |
17+ Paste the input here (or attach a golden file and mention the filename).
18+ Include any relevant configuration.
19+ placeholder: |
20+ ```purs
21+ -- Your input code here
22+ ```
23+ validations:
24+ required: true
25+ - type: textarea
26+ id: actual
27+ attributes:
28+ label: Actual output
29+ description: Paste the current output from purslint.
30+ placeholder: |
31+ ```
32+ -- Warnings, fixes, or logs
33+ ```
34+ validations:
35+ required: true
36+ - type: textarea
37+ id: expected
38+ attributes:
39+ label: Expected output
40+ description: Describe the expected output or behaviour.
41+ placeholder: |
42+ ```
43+ -- Expected warnings, fixes, or logs
44+ ```
45+ validations:
46+ required: true
47+ - type: textarea
48+ id: extra
49+ attributes:
50+ label: Additional context
51+ description: Links, screenshots, or anything else helpful.
52+ validations:
53+ required: false
.github/workflows/publish-npm.ymlnew file+27
@@ -0,0 +1,27 @@
1+name: Publish npm package
2+
3+on:
4+ release:
5+ types: [published]
6+ workflow_dispatch:
7+
8+permissions:
9+ contents: read
10+
11+jobs:
12+ publish:
13+ runs-on: ubuntu-latest
14+ steps:
15+ - uses: actions/checkout@v4
16+
17+ - uses: actions/setup-node@v4
18+ with:
19+ node-version: "20"
20+ registry-url: "https://registry.npmjs.org"
21+
22+ - run: npm install -g purescript@0.15.15
23+ - run: npm install --no-audit --no-fund
24+ - run: npm run dist
25+ - run: npm publish --access public
26+ env:
27+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
.github/workflows/publish-openvsx.ymlnew file+29
@@ -0,0 +1,29 @@
1+name: Publish Open VSX
2+
3+on:
4+ workflow_dispatch:
5+ release:
6+ types: [published]
7+
8+permissions:
9+ contents: read
10+
11+jobs:
12+ publish:
13+ runs-on: ubuntu-latest
14+ steps:
15+ - uses: actions/checkout@v4
16+
17+ - uses: actions/setup-node@v4
18+ with:
19+ node-version: "20"
20+
21+ - run: npm install -g purescript@0.15.15
22+ - run: npm install
23+ working-directory: vscode-extension
24+ - run: npx vsce package
25+ working-directory: vscode-extension
26+ - run: npx ovsx publish -p "${OPENVSX_TOKEN}"
27+ working-directory: vscode-extension
28+ env:
29+ OPENVSX_TOKEN: ${{ secrets.OPENVSX_TOKEN }}
.github/workflows/publish-vscode.ymlnew file+26
@@ -0,0 +1,26 @@
1+name: Publish VS Code Marketplace
2+
3+on:
4+ workflow_dispatch:
5+ release:
6+ types: [published]
7+
8+permissions:
9+ contents: read
10+
11+jobs:
12+ publish:
13+ runs-on: ubuntu-latest
14+ steps:
15+ - uses: actions/checkout@v4
16+
17+ - uses: actions/setup-node@v4
18+ with:
19+ node-version: "20"
20+
21+ - run: npm install
22+ working-directory: vscode-extension
23+ - run: npx vsce publish --pat "${VSCE_TOKEN}"
24+ working-directory: vscode-extension
25+ env:
26+ VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }}
CONTRIBUTING.mdnew file+6
@@ -0,0 +1,6 @@
1+# Contributing
2+
3+## Publishing (Marketplace)
4+
5+Publisher management and VSIX uploads live here:
6+https://marketplace.visualstudio.com/manage/publishers/RowtypeYoga
LICENSEnew file+21
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2026 Rowtype Yoga
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
README.md+93−80
@@ -1,77 +1,58 @@
1−# PureLint
1+# Purslint
22
3−A PureScript linter inspired by [hlint](https://github.com/ndmitchell/hlint), providing suggestions for cleaner, more idiomatic PureScript code.
3+<p align="center">
4+ <img src="vscode-extension/purslint.png" alt="Purslint logo" width="180" />
5+</p>
46
5−## Features
7+<p align="center">
8+ <a href="https://github.com/user-attachments/assets/6d855014-18f5-4729-be28-e91ec2d19c8f">
9+ <img src="demo.gif" alt="Purslint demo" width="480" />
10+ </a>
11+</p>
12+
13+A PureScript linter.
14+
15+Purslint is very new and may have bugs, so please use an editor with undo functionality. :D
616
7−PureLint currently ships with **81 lint rules**, covering common PureScript refactors and simplifications.
17+## Install
818
9−For a complete list, see `lib/purelint/src/Purelint/Rules/`.
19+### VS Code (Marketplace)
1020
11−## Installation
21+Install from the Visual Studio Marketplace:
22+[Purslint](https://marketplace.visualstudio.com/items?itemName=RowtypeYoga.purslint).
1223
13−### npm (recommended)
24+### CLI (npm)
1425
1526```bash
1627npm install -g purslint
1728
1829# CLI
19−purelint --help
30+purslint --help
2031```
2132
22−### Prerequisites
33+### Neovim (nvim-lspconfig)
2334
24−- [PureScript](https://www.purescript.org/) compiler (`purs`)
25−- [Spago](https://github.com/purescript/spago) package manager
26−- [Go](https://golang.org/) 1.19+
27−- [psgo](https://github.com/puregocore/psgo) - PureScript to Go compiler
35+After building `purslint-lsp` (see build steps below), you can configure Neovim like this:
2836
29−### Building
37+```lua
38+require("lspconfig").purslint = {
39+ default_config = {
40+ cmd = { "/path/to/purslint-lsp" },
41+ filetypes = { "purescript" },
42+ root_dir = require("lspconfig.util").root_pattern(".git", "spago.yaml", "package.json"),
43+ },
44+}
3045
31−```bash
32−# Install dependencies
33−spago install
34−
35−# Build CLI
36−purs compile --codegen corefn 'lib/**/*.purs' 'bin/purelint-cli/**/*.purs' '.spago/**/*.purs'
37−psgo output/*/corefn.json
38−cp output/Main/Main.go main_cli.go
39−go build -o purelint main_cli.go
40−
41−# Build LSP
42−purs compile --codegen corefn 'lib/**/*.purs' 'bin/purelint-lsp/**/*.purs' '.spago/**/*.purs'
43−psgo output/*/corefn.json
44−cp output/Main/Main.go main_lsp.go
45−go build -o purelint-lsp main_lsp.go
46−
47−# Build and run tests
48−purs compile --codegen corefn 'lib/**/*.purs' 'test/**/*.purs' '.spago/**/*.purs'
49−psgo output/*/corefn.json
50−cp output/Test.Main/Test_Main.go test_main.go
51−go build -o test-runner test_main.go
52−./test-runner
46+require("lspconfig").purslint.setup({})
5347```
5448
55−## Usage
56−
57−### CLI
58−
59−```bash
60−# Lint a single file
61−./purelint src/Main.purs
62−
63−# Lint multiple files
64−./purelint src/*.purs
49+If you prefer to run the bundled JS directly:
6550
66−# Lint with config file (optional)
67−./purelint --config purelint.json src/*.purs
51+```lua
52+cmd = { "node", "/path/to/dist/purslint-lsp.js" }
6853```
6954
70−### LSP (Language Server Protocol)
71−
72−The LSP binary (`purelint-lsp`) provides IDE integration. It communicates via stdio using the standard LSP protocol.
73−
74−#### Zed Editor
55+### Zed Editor
7556
7657A Zed extension is available in the `zed-extension/` directory. To install:
7758
@@ -80,33 +61,36 @@ A Zed extension is available in the `zed-extension/` directory. To install:
80613. Click "Install Dev Extension"
81624. Select the `zed-extension/` directory
8263
83−The extension will automatically use the `purelint-lsp` binary.
64+The extension will automatically use the `purslint-lsp` binary.
8465
85−#### Neovim (nvim-lspconfig)
66+## Usage
8667
87−After building `purelint-lsp` (see build steps below), you can configure Neovim like this:
68+### CLI
8869
89−```lua
90−require("lspconfig").purelint = {
91− default_config = {
92− cmd = { "/path/to/purelint-lsp" },
93− filetypes = { "purescript" },
94− root_dir = require("lspconfig.util").root_pattern(".git", "spago.yaml", "package.json"),
95− },
96−}
70+```bash
71+# Lint a single file
72+./purslint src/Main.purs
73+
74+# Lint multiple files
75+./purslint src/*.purs
9776
98−require("lspconfig").purelint.setup({})
77+# Lint with config file (optional)
78+./purslint --config purslint.json src/*.purs
9979```
10080
101−If you prefer to run the bundled JS directly:
81+### LSP (Language Server Protocol)
10282
103−```lua
104−cmd = { "node", "/path/to/dist/purelint-lsp.js" }
105−```
83+The LSP binary (`purslint-lsp`) provides IDE integration. It communicates via stdio using the standard LSP protocol.
84+
85+## Features
86+
87+Purslint currently ships with **81 lint rules**, covering common PureScript refactors and simplifications.
88+
89+For a complete list, see `lib/purslint/src/Purslint/Rules/`.
10690
10791## Configuration
10892
109−Create a `purelint.json` file in your project root:
93+Create a `purslint.json` file in your project root:
11094
11195```json
11296{
@@ -116,36 +100,63 @@ Create a `purelint.json` file in your project root:
116100
117101## Architecture
118102
119−PureLint is written in PureScript and compiled to Go using `psgo` (purescript-native). This allows:
103+Purslint is written in PureScript and compiled to JavaScript via
104+`purs-backend-es`, then bundled for Node.js. This allows:
120105
121106- Full access to the PureScript CST parser (`purescript-language-cst-parser`)
122−- Native binary performance
123−- Easy distribution without runtime dependencies
107+- Straightforward distribution via npm
108+- A single runtime across CLI and LSP
124109
125110### Project Structure
126111
127112```
128−purelint/
129−├── lib/purelint/src/ # Core library
130−│ └── Purelint/
113+purslint/
114+├── lib/purslint/src/ # Core library
115+│ └── Purslint/
131116│ ├── Rules/ # Lint rules
132117│ ├── Runner.purs # Rule runner
133118│ ├── Types.purs # Core types
134119│ └── Imports.purs # Import checking
135120├── bin/
136−│ ├── purelint-cli/ # CLI application
137−│ └── purelint-lsp/ # LSP server
121+│ ├── purslint-cli/ # CLI application
122+│ └── purslint-lsp/ # LSP server
138123├── test/ # Test suite
139124└── zed-extension/ # Zed editor extension
140125```
141126
142127## Development
143128
129+### Prerequisites
130+
131+- [PureScript](https://www.purescript.org/) compiler (`purs`)
132+- [Spago](https://github.com/purescript/spago) package manager
133+- [Node.js](https://nodejs.org/) 18+
134+
135+### Building
136+
137+```bash
138+# Install dependencies
139+npm install
140+
141+# Build and bundle CLI + LSP
142+npm run dist
143+
144+# Run tests
145+npm test
146+```
147+
148+### Publishing to npm
149+
150+Publishing is handled by GitHub Actions. Add an `NPM_TOKEN` secret with an
151+automation or granular token that has publish rights for `purslint`, then
152+create a GitHub Release to trigger the workflow. You can also run it manually
153+via the workflow dispatch.
154+
144155### Adding a New Rule
145156
146−1. Create a new file in `lib/purelint/src/Purelint/Rules/`
157+1. Create a new file in `lib/purslint/src/Purslint/Rules/`
1471582. Implement the rule using the CST traversal API
148−3. Export the rule from `Purelint.Rules`
159+3. Export the rule from `Purslint.Rules`
1491604. Add tests in `test/Test/Main.purs`
1501615. Rebuild and test
151162
@@ -153,6 +164,8 @@ purelint/
153164
154165- `purescript-language-cst-parser` - PureScript CST parser
155166- `purescript-lsp` - LSP protocol implementation (Go FFI)
167+- `purs-backend-es` - PureScript to JavaScript backend
168+- `esbuild` - Bundler for CLI and LSP
156169
157170## License
158171
bin/purelint-cli/src/Main.pursdeleted−374
@@ -1,374 +0,0 @@
1−module Main where
2−
3−import Prelude
4−
5−import Data.Array as Array
6−import Data.Either (Either(..))
7−import Data.Foldable (for_)
8−import Data.Maybe (Maybe(..))
9−import Data.Newtype (unwrap)
10−import Data.String.CodeUnits as String
11−import Effect (Effect)
12−import Effect.Console (log)
13−import Node.FS.Simple as FS
14−import Node.CLI as Process
15−import Purelint.Config (defaultConfig, filterRules, parseConfig)
16−import Purelint.Fix (applyAllFixes)
17−import Purelint.Rule (Rule)
18−import Purelint.Rules.BooleanSimplify (booleanSimplifyRule)
19−import Purelint.Rules.CollapseLambdas (collapseLambdasRule)
20−import Purelint.Rules.ConcatMap (concatMapRule)
21−import Purelint.Rules.EtaReduce (etaReduceRule)
22−import Purelint.Rules.EtaReduceDecl (etaReduceDeclRule)
23−import Purelint.Rules.AlternativeLaw (alternativeLawRule)
24−import Purelint.Rules.EvaluateBool (evaluateBoolRule)
25−import Purelint.Rules.EvaluateConst (evaluateConstRule)
26−import Purelint.Rules.EvaluateEither (evaluateEitherRule)
27−import Purelint.Rules.EvaluateFst (evaluateFstRule)
28−import Purelint.Rules.MapIdentity (mapIdentityRule)
29−import Purelint.Rules.FunctorLaw (functorLawRule)
30−import Purelint.Rules.LetToDo (letToDoRule)
31−import Purelint.Rules.LetToWhere (letToWhereRule)
32−import Purelint.Rules.MapFusion (mapFusionRule)
33−import Purelint.Rules.MonadLaw (monadLawRule)
34−import Purelint.Rules.MonoidIdentity (monoidIdentityRule)
35−import Purelint.Rules.NotEqual (notEqualRule)
36−import Purelint.Rules.NothingBind (nothingBindRule)
37−import Purelint.Rules.RedundantBind (redundantBindRule)
38−import Purelint.Rules.RedundantFlip (redundantFlipRule)
39−import Purelint.Rules.RedundantGuard (redundantGuardRule)
40−import Purelint.Rules.RedundantId (redundantIdRule)
41−import Purelint.Rules.RedundantIf (redundantIfRule)
42−import Purelint.Rules.RedundantNegate (redundantNegateRule)
43−import Purelint.Rules.RedundantNot (redundantNotRule)
44−import Purelint.Rules.RedundantReverse (redundantReverseRule)
45−import Purelint.Rules.UnlessNot (unlessNotRule)
46−import Purelint.Rules.UseAll (useAllRule)
47−import Purelint.Rules.UseAnd (useAndRule)
48−import Purelint.Rules.UseAny (useAnyRule)
49−import Purelint.Rules.UseApplicative (useApplicativeRule)
50−import Purelint.Rules.UseApplyFlipped (useApplyFlippedRule)
51−import Purelint.Rules.UseBimap (useBimapRule)
52−import Purelint.Rules.UseBindFlip (useBindFlipRule)
53−import Purelint.Rules.UseBreak (useBreakRule)
54−import Purelint.Rules.UseComparing (useComparingRule)
55−import Purelint.Rules.UseConst (useConstRule)
56−import Purelint.Rules.UseDollar (useDollarRule)
57−import Purelint.Rules.UseEitherMap (useEitherMapRule)
58−import Purelint.Rules.UseElemIndex (useElemIndexRule)
59−import Purelint.Rules.UseFindMap (useFindMapRule)
60−import Purelint.Rules.UseFold (useFoldRule)
61−import Purelint.Rules.UseFoldBool (useFoldBoolRule)
62−import Purelint.Rules.UseFoldMap (useFoldMapRule)
63−import Purelint.Rules.UseFoldMapId (useFoldMapIdRule)
64−import Purelint.Rules.UseFor (useForRule)
65−import Purelint.Rules.UseFromJust (useFromJustRule)
66−import Purelint.Rules.UseFromMaybe (useFromMaybeRule)
67−import Purelint.Rules.UseFstSnd (useFstSndRule)
68−import Purelint.Rules.UseGuard (useGuardRule)
69−import Purelint.Rules.UseGuardMaybe (useGuardMaybeRule)
70−import Purelint.Rules.UseHead (useHeadRule)
71−import Purelint.Rules.UseIsJust (useIsJustRule)
72−import Purelint.Rules.UseIsNothing (useIsNothingRule)
73−import Purelint.Rules.UseJoin (useJoinRule)
74−import Purelint.Rules.UseLastReverse (useLastReverseRule)
75−import Purelint.Rules.UseMapMaybe (useMapMaybeRule)
76−import Purelint.Rules.UseMaybeMap (useMaybeMapRule)
77−import Purelint.Rules.UseMinMax (useMinMaxRule)
78−import Purelint.Rules.UseMinimumSort (useMinimumSortRule)
79−import Purelint.Rules.UseNotElem (useNotElemRule)
80−import Purelint.Rules.UseNull (useNullRule)
81−import Purelint.Rules.UseCaseOf (useCaseOfRule)
82−import Purelint.Rules.FlattenCase (flattenCaseRule)
83−import Purelint.Rules.UseOn (useOnRule)
84−import Purelint.Rules.UseOr (useOrRule)
85−import Purelint.Rules.UsePatternGuards (usePatternGuardsRule)
86−import Purelint.Rules.UseReplicate (useReplicateRule)
87−import Purelint.Rules.UseSequence (useSequenceRule)
88−import Purelint.Rules.UseSpan (useSpanRule)
89−import Purelint.Rules.UseTraverse (useTraverseRule)
90−import Purelint.Rules.UseTraverseSequence (useTraverseSequenceRule)
91−import Purelint.Rules.UseUncurry (useUncurryRule)
92−import Purelint.Rules.UseUnless (useUnlessRule)
93−import Purelint.Rules.UseUnwrap (useUnwrapRule)
94−import Purelint.Rules.UseVoid (useVoidRule)
95−import Purelint.Rules.UseWhen (useWhenRule)
96−import Purelint.Rules.UseZip (useZipRule)
97−import Purelint.Rules.WhenNot (whenNotRule)
98−import Purelint.Rules.RedundantParens (redundantParensRule)
99−import Purelint.Runner (runRules)
100−import Purelint.Types (LintResult(..), LintWarning(..), Severity(..), SourceCode(..), Suggestion(..))
101−
102−-- | All available rules (81 total)
103−allRules :: Array Rule
104−allRules =
105− [ alternativeLawRule
106− , booleanSimplifyRule
107− , collapseLambdasRule
108− , concatMapRule
109− , etaReduceRule
110− , etaReduceDeclRule
111− , evaluateBoolRule
112− , evaluateConstRule
113− , evaluateEitherRule
114− , evaluateFstRule
115− , mapIdentityRule
116− , functorLawRule
117− , letToDoRule
118− , letToWhereRule
119− , mapFusionRule
120− , monadLawRule
121− , monoidIdentityRule
122− , notEqualRule
123− , nothingBindRule
124− , redundantBindRule
125− , redundantFlipRule
126− , redundantGuardRule
127− , redundantIdRule
128− , redundantIfRule
129− , redundantNegateRule
130− , redundantNotRule
131− , redundantParensRule
132− , redundantReverseRule
133− , unlessNotRule
134− , useAllRule
135− , useAndRule
136− , useAnyRule
137− , useApplicativeRule
138− , useApplyFlippedRule
139− , useBimapRule
140− , useBindFlipRule
141− , useBreakRule
142− , useComparingRule
143− , useConstRule
144− , useDollarRule
145− , useEitherMapRule
146− , useElemIndexRule
147− , useFindMapRule
148− , useFoldRule
149− , useFoldBoolRule
150− , useFoldMapRule
151− , useFoldMapIdRule
152− , useForRule
153− , useFromJustRule
154− , useFromMaybeRule
155− , useFstSndRule
156− , useGuardRule
157− , useGuardMaybeRule
158− , useHeadRule
159− , useIsJustRule
160− , useIsNothingRule
161− , useJoinRule
162− , useLastReverseRule
163− , useMapMaybeRule
164− , useMaybeMapRule
165− , useMinMaxRule
166− , useMinimumSortRule
167− , useNotElemRule
168− , useNullRule
169− , useOnRule
170− , useOrRule
171− , usePatternGuardsRule
172− , useCaseOfRule
173− , flattenCaseRule
174− , useReplicateRule
175− , useSequenceRule
176− , useSpanRule
177− , useTraverseRule
178− , useTraverseSequenceRule
179− , useUncurryRule
180− , useUnlessRule
181− , useUnwrapRule
182− , useVoidRule
183− , useWhenRule
184− , useZipRule
185− , whenNotRule
186− ]
187−
188−-- | Load config from .purelintrc file
189−loadConfig :: Effect _
190−loadConfig = do
191− hasConfig <- FS.exists ".purelintrc"
192− if hasConfig then do
193− content <- FS.readTextFile ".purelintrc"
194− pure $ parseConfig content
195− else
196− pure defaultConfig
197−
198−-- | Format a source range for display
199−formatRange :: { start :: { line :: Int, column :: Int }, end :: { line :: Int, column :: Int } } -> String
200−formatRange r = show (r.start.line + 1) <> ":" <> show (r.start.column + 1) <> "-" <> show (r.end.line + 1) <> ":" <> show (r.end.column + 1)
201−
202−-- | Format severity for display
203−formatSeverity :: Severity -> String
204−formatSeverity Refactor = "[refactor]"
205−formatSeverity Hint = "[hint]"
206−formatSeverity Warning = "[warning]"
207−formatSeverity Error = "[error]"
208−
209−-- | Format a single warning for display
210−formatWarning :: String -> LintWarning -> String
211−formatWarning filePath (LintWarning w) =
212− filePath <> ":" <> formatRange w.range <> " " <> formatSeverity w.severity <> " " <> unwrap w.ruleId <> ": " <> unwrap w.message <>
213− case w.suggestion of
214− Nothing -> ""
215− Just (Suggestion s) -> "\n Replace with: " <> unwrap s.replacement
216−
217−-- | Lint a single file with config
218−lintFileWithConfig :: Array Rule -> String -> Effect Int
219−lintFileWithConfig rules filePath = do
220− content <- FS.readTextFile filePath
221− case runRules rules (SourceCode content) of
222− Left err -> do
223− log $ filePath <> ": " <> err
224− pure 0
225− Right (LintResult result) -> do
226− for_ result.warnings \w -> do
227− log $ formatWarning filePath w
228− pure (Array.length result.warnings)
229−
230−-- | Fix a single file
231−fixFile :: Array Rule -> String -> Effect Int
232−fixFile rules filePath = do
233− content <- FS.readTextFile filePath
234− case runRules rules (SourceCode content) of
235− Left err -> do
236− log $ filePath <> ": " <> err
237− pure 0
238− Right result@(LintResult r) -> do
239− let fixedContent = applyAllFixes content result
240− when (fixedContent /= content) do
241− FS.writeTextFile filePath fixedContent
242− log $ filePath <> ": fixed " <> show (Array.length r.warnings) <> " issue(s)"
243− pure (Array.length r.warnings)
244−
245−-- | Recursively find all .purs files in a directory
246−findPursFiles :: String -> Effect (Array String)
247−findPursFiles dir = do
248− entries <- FS.readdir dir
249− files <- Array.foldM (collectFiles dir) [] entries
250− pure files
251− where
252− collectFiles :: String -> Array String -> String -> Effect (Array String)
253− collectFiles parentDir acc entry = do
254− let path = parentDir <> "/" <> entry
255− -- Skip hidden directories and node_modules
256− if String.take 1 entry == "." || entry == "node_modules" || entry == ".spago" then
257− pure acc
258− else do
259− stats <- FS.stat path
260− if stats.isDirectory then do
261− subFiles <- findPursFiles path
262− pure (acc <> subFiles)
263− else if String.takeRight 5 entry == ".purs" then
264− pure (Array.snoc acc path)
265− else
266− pure acc
267−
268−-- | Lint a file or directory with config
269−lintPathWithConfig :: Array Rule -> String -> Effect Int
270−lintPathWithConfig rules path = do
271− stats <- FS.stat path
272− if stats.isDirectory then do
273− files <- findPursFiles path
274− counts <- Array.foldM (\acc file -> do
275− count <- lintFileWithConfig rules file
276− pure (acc + count)) 0 files
277− pure counts
278− else
279− lintFileWithConfig rules path
280−
281−-- | Fix a file or directory
282−fixPath :: Array Rule -> String -> Effect Int
283−fixPath rules path = do
284− stats <- FS.stat path
285− if stats.isDirectory then do
286− files <- findPursFiles path
287− counts <- Array.foldM (\acc file -> do
288− count <- fixFile rules file
289− pure (acc + count)) 0 files
290− pure counts
291− else
292− fixFile rules path
293−
294−-- | Show usage
295−showUsage :: Effect Unit
296−showUsage = do
297− log "purelint - a linter for PureScript (70 rules)"
298− log ""
299− log "Usage: purelint [OPTIONS] [FILES/DIRECTORIES...]"
300− log ""
301− log "Options:"
302− log " --help Show this help"
303− log " --fix Auto-fix issues (where possible)"
304− log " --init Create a sample .purelintrc"
305− log " --list List all available rules"
306− log ""
307− log "Configuration:"
308− log " Create .purelintrc in your project root to disable rules."
309− log " Add one rule name per line (lines starting with # are comments)."
310− log ""
311− log "Examples:"
312− log " purelint src/ Lint all .purs files in src/"
313− log " purelint --fix src/ Auto-fix issues in src/"
314− log " purelint src/Main.purs Lint a single file"
315−
316−-- | List all available rules
317−listRules :: Effect Unit
318−listRules = do
319− log $ "Available rules (" <> show (Array.length allRules) <> " total):"
320− log ""
321− for_ allRules \rule -> do
322− log $ " " <> unwrap rule.ruleId
323−
324−-- | Create sample config file
325−initConfig :: Effect Unit
326−initConfig = do
327− hasConfig <- FS.exists ".purelintrc"
328− if hasConfig then
329− log ".purelintrc already exists"
330− else do
331− let sampleConfig = """# purelint configuration
332−# Add rule names (one per line) to disable them
333−# Example:
334−# EtaReduce
335−# LetToWhere
336−"""
337− FS.writeTextFile ".purelintrc" sampleConfig
338− log "Created .purelintrc"
339−
340−main :: Effect Unit
341−main = do
342− args <- Process.argv
343− -- args[0] is node, args[1] is the script, args[2..] are the actual arguments
344− let userArgs = Array.drop 1 args
345− case userArgs of
346− [] -> showUsage
347− ["--help"] -> showUsage
348− ["-h"] -> showUsage
349− ["--list"] -> listRules
350− ["--init"] -> initConfig
351− _ -> do
352− -- Check for --fix flag
353− let hasFix = Array.elem "--fix" userArgs
354− let paths = Array.filter (\a -> a /= "--fix") userArgs
355−
356− -- Load config and filter rules
357− config <- loadConfig
358− let enabledRules = filterRules allRules config
359−
360− if hasFix then do
361− -- Fix mode
362− _ <- Array.foldM (\acc path -> do
363− count <- fixPath enabledRules path
364− pure (acc + count)) 0 paths
365− pure unit
366− else do
367− -- Lint mode
368− totalWarnings <- Array.foldM (\acc path -> do
369− count <- lintPathWithConfig enabledRules path
370− pure (acc + count)) 0 paths
371− when (totalWarnings > 0) do
372− log ""
373− log $ "Total: " <> show totalWarnings <> " warning" <> if totalWarnings == 1 then "" else "s"
374− Process.exit 1
bin/purelint-lsp.jsdeleted−3
@@ -1,3 +0,0 @@
1−#!/usr/bin/env node
2−import { main } from "../output-lsp/Main.LSP/index.js";
3−main();
bin/purelint.jsdeleted−3
@@ -1,3 +0,0 @@
1−#!/usr/bin/env node
2−import { main } from "../output-cli/Main/index.js";
3−main();
bin/purelint-cli/spago.yaml → bin/purslint-cli/spago.yamlrenamed+3−2
@@ -1,5 +1,5 @@
11package:
2− name: purelint-cli
2+ name: purslint-cli
33 dependencies:
44 - arrays
55 - console
@@ -8,8 +8,9 @@ package:
88 - foldable-traversable
99 - maybe
1010 - newtype
11+ - optparse
1112 - prelude
12− - purelint
13+ - purslint
1314 - strings
1415 - node-buffer
1516 - node-fs
bin/purslint-cli/src/Main.pursnew file+419
@@ -0,0 +1,419 @@
1+module Main where
2+
3+import Prelude
4+
5+import Data.Array as Array
6+import Data.Either (Either(..))
7+import Data.Enum (fromEnum)
8+import Data.Foldable (for_)
9+import Data.Maybe (Maybe(..))
10+import Data.Newtype (unwrap)
11+import Data.String.CodeUnits as String
12+import Data.Tuple.Nested ((/\))
13+import Effect (Effect)
14+import Effect.Console (log)
15+import Node.FS.Simple as FS
16+import Node.CLI as Process
17+import Options.Applicative (Parser, argument, execParserPure, fullDesc, header, help, helper, info, long, many, metavar, progDesc, str, switch, (<**>))
18+import Options.Applicative.Builder (defaultPrefs)
19+import Options.Applicative.Types (CompletionResult(..), ParserFailure(ParserFailure), ParserResult(..))
20+import Options.Applicative.Help.Types (ParserHelp(ParserHelp), renderHelp)
21+import Purslint.Config (defaultConfig, filterRules, parseConfig)
22+import Purslint.Fix (applyAllFixes)
23+import Purslint.Rule (Rule)
24+import Purslint.Rules.BooleanSimplify (booleanSimplifyRule)
25+import Purslint.Rules.CollapseLambdas (collapseLambdasRule)
26+import Purslint.Rules.ConcatMap (concatMapRule)
27+import Purslint.Rules.EtaReduce (etaReduceRule)
28+import Purslint.Rules.EtaReduceDecl (etaReduceDeclRule)
29+import Purslint.Rules.AlternativeLaw (alternativeLawRule)
30+import Purslint.Rules.EvaluateBool (evaluateBoolRule)
31+import Purslint.Rules.EvaluateConst (evaluateConstRule)
32+import Purslint.Rules.EvaluateEither (evaluateEitherRule)
33+import Purslint.Rules.EvaluateFst (evaluateFstRule)
34+import Purslint.Rules.MapIdentity (mapIdentityRule)
35+import Purslint.Rules.FunctorLaw (functorLawRule)
36+import Purslint.Rules.LetToDo (letToDoRule)
37+import Purslint.Rules.LetToWhere (letToWhereRule)
38+import Purslint.Rules.MapFusion (mapFusionRule)
39+import Purslint.Rules.MonadLaw (monadLawRule)
40+import Purslint.Rules.MonoidIdentity (monoidIdentityRule)
41+import Purslint.Rules.NotEqual (notEqualRule)
42+import Purslint.Rules.NothingBind (nothingBindRule)
43+import Purslint.Rules.RedundantBind (redundantBindRule)
44+import Purslint.Rules.RedundantFlip (redundantFlipRule)
45+import Purslint.Rules.RedundantGuard (redundantGuardRule)
46+import Purslint.Rules.RedundantId (redundantIdRule)
47+import Purslint.Rules.RedundantIf (redundantIfRule)
48+import Purslint.Rules.RedundantNegate (redundantNegateRule)
49+import Purslint.Rules.RedundantNot (redundantNotRule)
50+import Purslint.Rules.RedundantReverse (redundantReverseRule)
51+import Purslint.Rules.UnlessNot (unlessNotRule)
52+import Purslint.Rules.UseAll (useAllRule)
53+import Purslint.Rules.UseAnd (useAndRule)
54+import Purslint.Rules.UseAny (useAnyRule)
55+import Purslint.Rules.UseApplicative (useApplicativeRule)
56+import Purslint.Rules.UseApplyFlipped (useApplyFlippedRule)
57+import Purslint.Rules.UseBimap (useBimapRule)
58+import Purslint.Rules.UseBindFlip (useBindFlipRule)
59+import Purslint.Rules.UseBreak (useBreakRule)
60+import Purslint.Rules.UseComparing (useComparingRule)
61+import Purslint.Rules.UseConst (useConstRule)
62+import Purslint.Rules.UseDollar (useDollarRule)
63+import Purslint.Rules.UseEitherMap (useEitherMapRule)
64+import Purslint.Rules.UseElemIndex (useElemIndexRule)
65+import Purslint.Rules.UseFindMap (useFindMapRule)
66+import Purslint.Rules.UseFold (useFoldRule)
67+import Purslint.Rules.UseFoldBool (useFoldBoolRule)
68+import Purslint.Rules.UseFoldMap (useFoldMapRule)
69+import Purslint.Rules.UseFoldMapId (useFoldMapIdRule)
70+import Purslint.Rules.UseFor (useForRule)
71+import Purslint.Rules.UseFromJust (useFromJustRule)
72+import Purslint.Rules.UseFromMaybe (useFromMaybeRule)
73+import Purslint.Rules.UseFstSnd (useFstSndRule)
74+import Purslint.Rules.UseGuard (useGuardRule)
75+import Purslint.Rules.UseGuardMaybe (useGuardMaybeRule)
76+import Purslint.Rules.UseHead (useHeadRule)
77+import Purslint.Rules.UseIsJust (useIsJustRule)
78+import Purslint.Rules.UseIsNothing (useIsNothingRule)
79+import Purslint.Rules.UseJoin (useJoinRule)
80+import Purslint.Rules.UseLastReverse (useLastReverseRule)
81+import Purslint.Rules.UseMapMaybe (useMapMaybeRule)
82+import Purslint.Rules.UseMaybeMap (useMaybeMapRule)
83+import Purslint.Rules.UseMinMax (useMinMaxRule)
84+import Purslint.Rules.UseMinimumSort (useMinimumSortRule)
85+import Purslint.Rules.UseNotElem (useNotElemRule)
86+import Purslint.Rules.UseNull (useNullRule)
87+import Purslint.Rules.UseCaseOf (useCaseOfRule)
88+import Purslint.Rules.FlattenCase (flattenCaseRule)
89+import Purslint.Rules.UseOn (useOnRule)
90+import Purslint.Rules.UseOr (useOrRule)
91+import Purslint.Rules.UsePatternGuards (usePatternGuardsRule)
92+import Purslint.Rules.UseReplicate (useReplicateRule)
93+import Purslint.Rules.UseSequence (useSequenceRule)
94+import Purslint.Rules.UseSpan (useSpanRule)
95+import Purslint.Rules.UseTraverse (useTraverseRule)
96+import Purslint.Rules.UseTraverseSequence (useTraverseSequenceRule)
97+import Purslint.Rules.UseUncurry (useUncurryRule)
98+import Purslint.Rules.UseUnless (useUnlessRule)
99+import Purslint.Rules.UseUnwrap (useUnwrapRule)
100+import Purslint.Rules.UseVoid (useVoidRule)
101+import Purslint.Rules.UseWhen (useWhenRule)
102+import Purslint.Rules.UseZip (useZipRule)
103+import Purslint.Rules.WhenNot (whenNotRule)
104+import Purslint.Rules.RedundantParens (redundantParensRule)
105+import Purslint.Runner (runRules)
106+import Purslint.Types (LintResult(..), LintWarning(..), Severity(..), SourceCode(..), Suggestion(..))
107+
108+type CliOptions =
109+ { fix :: Boolean
110+ , listRules :: Boolean
111+ , initConfig :: Boolean
112+ , paths :: Array String
113+ }
114+
115+-- | All available rules (81 total)
116+allRules :: Array Rule
117+allRules =
118+ [ alternativeLawRule
119+ , booleanSimplifyRule
120+ , collapseLambdasRule
121+ , concatMapRule
122+ , etaReduceRule
123+ , etaReduceDeclRule
124+ , evaluateBoolRule
125+ , evaluateConstRule
126+ , evaluateEitherRule
127+ , evaluateFstRule
128+ , mapIdentityRule
129+ , functorLawRule
130+ , letToDoRule
131+ , letToWhereRule
132+ , mapFusionRule
133+ , monadLawRule
134+ , monoidIdentityRule
135+ , notEqualRule
136+ , nothingBindRule
137+ , redundantBindRule
138+ , redundantFlipRule
139+ , redundantGuardRule
140+ , redundantIdRule
141+ , redundantIfRule
142+ , redundantNegateRule
143+ , redundantNotRule
144+ , redundantParensRule
145+ , redundantReverseRule
146+ , unlessNotRule
147+ , useAllRule
148+ , useAndRule
149+ , useAnyRule
150+ , useApplicativeRule
151+ , useApplyFlippedRule
152+ , useBimapRule
153+ , useBindFlipRule
154+ , useBreakRule
155+ , useComparingRule
156+ , useConstRule
157+ , useDollarRule
158+ , useEitherMapRule
159+ , useElemIndexRule
160+ , useFindMapRule
161+ , useFoldRule
162+ , useFoldBoolRule
163+ , useFoldMapRule
164+ , useFoldMapIdRule
165+ , useForRule
166+ , useFromJustRule
167+ , useFromMaybeRule
168+ , useFstSndRule
169+ , useGuardRule
170+ , useGuardMaybeRule
171+ , useHeadRule
172+ , useIsJustRule
173+ , useIsNothingRule
174+ , useJoinRule
175+ , useLastReverseRule
176+ , useMapMaybeRule
177+ , useMaybeMapRule
178+ , useMinMaxRule
179+ , useMinimumSortRule
180+ , useNotElemRule
181+ , useNullRule
182+ , useOnRule
183+ , useOrRule
184+ , usePatternGuardsRule
185+ , useCaseOfRule
186+ , flattenCaseRule
187+ , useReplicateRule
188+ , useSequenceRule
189+ , useSpanRule
190+ , useTraverseRule
191+ , useTraverseSequenceRule
192+ , useUncurryRule
193+ , useUnlessRule
194+ , useUnwrapRule
195+ , useVoidRule
196+ , useWhenRule
197+ , useZipRule
198+ , whenNotRule
199+ ]
200+
201+-- | Load config from .purslintrc file
202+loadConfig :: Effect _
203+loadConfig = do
204+ hasConfig <- FS.exists ".purslintrc"
205+ if hasConfig then do
206+ content <- FS.readTextFile ".purslintrc"
207+ pure $ parseConfig content
208+ else
209+ pure defaultConfig
210+
211+-- | Format a source range for display
212+formatRange :: { start :: { line :: Int, column :: Int }, end :: { line :: Int, column :: Int } } -> String
213+formatRange r = show (r.start.line + 1) <> ":" <> show (r.start.column + 1) <> "-" <> show (r.end.line + 1) <> ":" <> show (r.end.column + 1)
214+
215+-- | Format severity for display
216+formatSeverity :: Severity -> String
217+formatSeverity Refactor = "[refactor]"
218+formatSeverity Hint = "[hint]"
219+formatSeverity Warning = "[warning]"
220+formatSeverity Error = "[error]"
221+
222+-- | Format a single warning for display
223+formatWarning :: String -> LintWarning -> String
224+formatWarning filePath (LintWarning w) =
225+ filePath <> ":" <> formatRange w.range <> " " <> formatSeverity w.severity <> " " <> unwrap w.ruleId <> ": " <> unwrap w.message <>
226+ case w.suggestion of
227+ Nothing -> ""
228+ Just (Suggestion s) -> "\n Replace with: " <> unwrap s.replacement
229+
230+-- | Lint a single file with config
231+lintFileWithConfig :: Array Rule -> String -> Effect Int
232+lintFileWithConfig rules filePath = do
233+ content <- FS.readTextFile filePath
234+ case runRules rules (SourceCode content) of
235+ Left err -> do
236+ log $ filePath <> ": " <> err
237+ pure 0
238+ Right (LintResult result) -> do
239+ for_ result.warnings \w -> do
240+ log $ formatWarning filePath w
241+ pure (Array.length result.warnings)
242+
243+-- | Fix a single file
244+fixFile :: Array Rule -> String -> Effect Int
245+fixFile rules filePath = do
246+ content <- FS.readTextFile filePath
247+ case runRules rules (SourceCode content) of
248+ Left err -> do
249+ log $ filePath <> ": " <> err
250+ pure 0
251+ Right result@(LintResult r) -> do
252+ let fixedContent = applyAllFixes content result
253+ when (fixedContent /= content) do
254+ FS.writeTextFile filePath fixedContent
255+ log $ filePath <> ": fixed " <> show (Array.length r.warnings) <> " issue(s)"
256+ pure (Array.length r.warnings)
257+
258+-- | Recursively find all .purs files in a directory
259+findPursFiles :: String -> Effect (Array String)
260+findPursFiles dir = do
261+ entries <- FS.readdir dir
262+ files <- Array.foldM (collectFiles dir) [] entries
263+ pure files
264+ where
265+ collectFiles :: String -> Array String -> String -> Effect (Array String)
266+ collectFiles parentDir acc entry = do
267+ let path = parentDir <> "/" <> entry
268+ -- Skip hidden directories and node_modules
269+ if String.take 1 entry == "." || entry == "node_modules" || entry == ".spago" then
270+ pure acc
271+ else do
272+ stats <- FS.stat path
273+ if stats.isDirectory then do
274+ subFiles <- findPursFiles path
275+ pure (acc <> subFiles)
276+ else if String.takeRight 5 entry == ".purs" then
277+ pure (Array.snoc acc path)
278+ else
279+ pure acc
280+
281+-- | Lint a file or directory with config
282+lintPathWithConfig :: Array Rule -> String -> Effect Int
283+lintPathWithConfig rules path = do
284+ stats <- FS.stat path
285+ if stats.isDirectory then do
286+ files <- findPursFiles path
287+ counts <- Array.foldM (\acc file -> do
288+ count <- lintFileWithConfig rules file
289+ pure (acc + count)) 0 files
290+ pure counts
291+ else
292+ lintFileWithConfig rules path
293+
294+-- | Fix a file or directory
295+fixPath :: Array Rule -> String -> Effect Int
296+fixPath rules path = do
297+ stats <- FS.stat path
298+ if stats.isDirectory then do
299+ files <- findPursFiles path
300+ counts <- Array.foldM (\acc file -> do
301+ count <- fixFile rules file
302+ pure (acc + count)) 0 files
303+ pure counts
304+ else
305+ fixFile rules path
306+
307+-- | Show usage
308+showUsage :: Effect Unit
309+showUsage = do
310+ log "purslint - a linter for PureScript (81 rules)"
311+ log ""
312+ log "Usage: purslint [OPTIONS] [FILES/DIRECTORIES...]"
313+ log ""
314+ log "Options:"
315+ log " --help Show this help"
316+ log " --fix Auto-fix issues (where possible)"
317+ log " --init Create a sample .purslintrc"
318+ log " --list List all available rules"
319+ log ""
320+ log "Configuration:"
321+ log " Create .purslintrc in your project root to disable rules."
322+ log " Add one rule name per line (lines starting with # are comments)."
323+ log ""
324+ log "Examples:"
325+ log " purslint src/ Lint all .purs files in src/"
326+ log " purslint --fix src/ Auto-fix issues in src/"
327+ log " purslint src/Main.purs Lint a single file"
328+
329+-- | List all available rules
330+listRules :: Effect Unit
331+listRules = do
332+ log $ "Available rules (" <> show (Array.length allRules) <> " total):"
333+ log ""
334+ for_ allRules \rule -> do
335+ log $ " " <> unwrap rule.ruleId
336+
337+-- | Create sample config file
338+initConfig :: Effect Unit
339+initConfig = do
340+ hasConfig <- FS.exists ".purslintrc"
341+ if hasConfig then
342+ log ".purslintrc already exists"
343+ else do
344+ let sampleConfig = """# purslint configuration
345+# Add rule names (one per line) to disable them
346+# Example:
347+# EtaReduce
348+# LetToWhere
349+"""
350+ FS.writeTextFile ".purslintrc" sampleConfig
351+ log "Created .purslintrc"
352+
353+parseFlags :: Array String -> Effect (Maybe CliOptions)
354+parseFlags args = case parseFlags' (Array.drop 2 args) of
355+ Success cli -> pure (Just cli)
356+ Failure (ParserFailure pf) -> case pf programName of
357+ ph@(ParserHelp _) /\ exitCode /\ i /\ _unit -> do
358+ log $ renderHelp i ph
359+ Process.exit (fromEnum exitCode)
360+ pure Nothing
361+ CompletionInvoked (CompletionResult { execCompletion }) -> do
362+ executedCompletion <- execCompletion programName
363+ log executedCompletion
364+ Process.exit 0
365+ pure Nothing
366+ where
367+ programName = "purslint"
368+
369+parseFlags' :: Array String -> ParserResult CliOptions
370+parseFlags' = execParserPure defaultPrefs opts
371+ where
372+ opts =
373+ info (flagsParser <**> helper) $
374+ fullDesc
375+ <> progDesc "Lint PureScript source files"
376+ <> header "purslint - a linter for PureScript"
377+
378+flagsParser :: Parser CliOptions
379+flagsParser = ado
380+ fix <- switch $ long "fix" <> help "Auto-fix issues (where possible)"
381+ listRules <- switch $ long "list" <> help "List all available rules"
382+ initConfig <- switch $ long "init" <> help "Create a sample .purslintrc"
383+ pathsList <- many $ argument str $ metavar "PATH..."
384+ let paths = Array.fromFoldable pathsList
385+ in { fix, listRules, initConfig, paths }
386+
387+main :: Effect Unit
388+main = do
389+ args <- Process.argv
390+ maybeCli <- parseFlags args
391+ case maybeCli of
392+ Nothing -> pure unit
393+ Just cli ->
394+ if cli.listRules then
395+ listRules
396+ else if cli.initConfig then
397+ initConfig
398+ else if Array.null cli.paths then
399+ showUsage
400+ else do
401+ -- Load config and filter rules
402+ config <- loadConfig
403+ let enabledRules = filterRules allRules config
404+
405+ if cli.fix then do
406+ -- Fix mode
407+ _ <- Array.foldM (\acc path -> do
408+ count <- fixPath enabledRules path
409+ pure (acc + count)) 0 cli.paths
410+ pure unit
411+ else do
412+ -- Lint mode
413+ totalWarnings <- Array.foldM (\acc path -> do
414+ count <- lintPathWithConfig enabledRules path
415+ pure (acc + count)) 0 cli.paths
416+ when (totalWarnings > 0) do
417+ log ""
418+ log $ "Total: " <> show totalWarnings <> " warning" <> if totalWarnings == 1 then "" else "s"
419+ Process.exit 1
bin/purelint-cli/src/Node/CLI.js → bin/purslint-cli/src/Node/CLI.jsrenamed

The content is the same.

bin/purelint-cli/src/Node/CLI.purs → bin/purslint-cli/src/Node/CLI.pursrenamed

The content is the same.

bin/purelint-cli/src/Node/FS/Simple.js → bin/purslint-cli/src/Node/FS/Simple.jsrenamed

The content is the same.

bin/purelint-cli/src/Node/FS/Simple.purs → bin/purslint-cli/src/Node/FS/Simple.pursrenamed

The content is the same.

bin/purslint-lsp.jsnew file+2
@@ -0,0 +1,2 @@
1+#!/usr/bin/env node
2+import "../dist/purslint-lsp.js";
bin/purelint-lsp/spago.yaml → bin/purslint-lsp/spago.yamlrenamed+2−2
@@ -1,5 +1,5 @@
11package:
2− name: purelint-lsp
2+ name: purslint-lsp
33 dependencies:
44 - arrays
55 - effect
@@ -8,5 +8,5 @@ package:
88 - maybe
99 - newtype
1010 - prelude
11− - purelint
11+ - purslint
1212 - unsafe-coerce
bin/purelint-lsp/src/LSP.js → bin/purslint-lsp/src/LSP.jsrenamed+1−1
@@ -1,4 +1,4 @@
1−// Purelint.LSP FFI for JavaScript
1+// Purslint.LSP FFI for JavaScript
22
33// Create a null value
44export const mkNull = (_) => null;
bin/purelint-lsp/src/LSP.purs → bin/purslint-lsp/src/LSP.pursrenamed+104−104
@@ -1,4 +1,4 @@
1−module Purelint.LSP where
1+module Purslint.LSP where
22
33import Prelude
44
@@ -13,91 +13,91 @@ import Effect.Ref (Ref)
1313import Effect.Ref as Ref
1414import Foreign (Foreign)
1515import LSP.Stdio as Stdio
16−import Purelint.Config (Config, defaultConfig, filterRules)
17−import Purelint.Rule (Rule)
18−import Purelint.Rules.BooleanSimplify (booleanSimplifyRule)
19−import Purelint.Rules.CollapseLambdas (collapseLambdasRule)
20−import Purelint.Rules.ConcatMap (concatMapRule)
21−import Purelint.Rules.EtaReduce (etaReduceRule)
22−import Purelint.Rules.EtaReduceDecl (etaReduceDeclRule)
23−import Purelint.Rules.MapIdentity (mapIdentityRule)
24−import Purelint.Rules.FunctorLaw (functorLawRule)
25−import Purelint.Rules.LetToDo (letToDoRule)
26−import Purelint.Rules.LetToWhere (letToWhereRule)
27−import Purelint.Rules.MapFusion (mapFusionRule)
28−import Purelint.Rules.MonadLaw (monadLawRule)
29−import Purelint.Rules.MonoidIdentity (monoidIdentityRule)
30−import Purelint.Rules.NotEqual (notEqualRule)
31−import Purelint.Rules.RedundantBind (redundantBindRule)
32−import Purelint.Rules.RedundantFlip (redundantFlipRule)
33−import Purelint.Rules.RedundantIf (redundantIfRule)
34−import Purelint.Rules.RedundantNot (redundantNotRule)
35−import Purelint.Rules.UseAll (useAllRule)
36−import Purelint.Rules.UseAny (useAnyRule)
37−import Purelint.Rules.UseConst (useConstRule)
38−import Purelint.Rules.UseFold (useFoldRule)
39−import Purelint.Rules.UseFromMaybe (useFromMaybeRule)
40−import Purelint.Rules.UseFstSnd (useFstSndRule)
41−import Purelint.Rules.UseGuard (useGuardRule)
42−import Purelint.Rules.UseIsJust (useIsJustRule)
43−import Purelint.Rules.UseIsNothing (useIsNothingRule)
44−import Purelint.Rules.UseJoin (useJoinRule)
45−import Purelint.Rules.UseMinMax (useMinMaxRule)
46−import Purelint.Rules.UseNotElem (useNotElemRule)
47−import Purelint.Rules.UseNull (useNullRule)
48−import Purelint.Rules.UseSequence (useSequenceRule)
49−import Purelint.Rules.UseTraverse (useTraverseRule)
50−import Purelint.Rules.UseTraverseSequence (useTraverseSequenceRule)
51−import Purelint.Rules.UseUnless (useUnlessRule)
52−import Purelint.Rules.UseUnwrap (useUnwrapRule)
53−import Purelint.Rules.UseVoid (useVoidRule)
54−import Purelint.Rules.UseWhen (useWhenRule)
55−import Purelint.Rules.UseMapMaybe (useMapMaybeRule)
56−import Purelint.Rules.UseGuardMaybe (useGuardMaybeRule)
57−import Purelint.Rules.UseMaybeMap (useMaybeMapRule)
58−import Purelint.Rules.UseApplicative (useApplicativeRule)
59−import Purelint.Rules.UseApplyFlipped (useApplyFlippedRule)
60−import Purelint.Rules.UseBindFlip (useBindFlipRule)
61−import Purelint.Rules.UseFor (useForRule)
62−import Purelint.Rules.RedundantGuard (redundantGuardRule)
63−import Purelint.Rules.UseComparing (useComparingRule)
64−import Purelint.Rules.UseOn (useOnRule)
65−import Purelint.Rules.UseFindMap (useFindMapRule)
66−import Purelint.Rules.UseLastReverse (useLastReverseRule)
67−import Purelint.Rules.RedundantReverse (redundantReverseRule)
68−import Purelint.Rules.UseBreak (useBreakRule)
69−import Purelint.Rules.UseSpan (useSpanRule)
70−import Purelint.Rules.UseMinimumSort (useMinimumSortRule)
71−import Purelint.Rules.UseBimap (useBimapRule)
72−import Purelint.Rules.UseDollar (useDollarRule)
73−import Purelint.Rules.UseEitherMap (useEitherMapRule)
74−import Purelint.Rules.AlternativeLaw (alternativeLawRule)
75−import Purelint.Rules.EvaluateBool (evaluateBoolRule)
76−import Purelint.Rules.EvaluateConst (evaluateConstRule)
77−import Purelint.Rules.EvaluateEither (evaluateEitherRule)
78−import Purelint.Rules.EvaluateFst (evaluateFstRule)
79−import Purelint.Rules.UseOr (useOrRule)
80−import Purelint.Rules.UseAnd (useAndRule)
81−import Purelint.Rules.UseFoldMap (useFoldMapRule)
82−import Purelint.Rules.UseFoldMapId (useFoldMapIdRule)
83−import Purelint.Rules.WhenNot (whenNotRule)
84−import Purelint.Rules.UnlessNot (unlessNotRule)
85−import Purelint.Rules.UseZip (useZipRule)
86−import Purelint.Rules.UseReplicate (useReplicateRule)
87−import Purelint.Rules.UseUncurry (useUncurryRule)
88−import Purelint.Rules.RedundantNegate (redundantNegateRule)
89−import Purelint.Rules.UseFromJust (useFromJustRule)
90−import Purelint.Rules.UseHead (useHeadRule)
91−import Purelint.Rules.RedundantId (redundantIdRule)
92−import Purelint.Rules.NothingBind (nothingBindRule)
93−import Purelint.Rules.UseElemIndex (useElemIndexRule)
94−import Purelint.Rules.UseFoldBool (useFoldBoolRule)
95−import Purelint.Rules.UsePatternGuards (usePatternGuardsRule)
96−import Purelint.Rules.UseCaseOf (useCaseOfRule)
97−import Purelint.Rules.FlattenCase (flattenCaseRule)
98−import Purelint.Rules.RedundantParens (redundantParensRule)
99−import Purelint.Runner (runRules)
100−import Purelint.Types (LintResult(..), LintWarning(..), RuleId(..), Severity(..), SourceCode(..), Suggestion(..))
16+import Purslint.Config (Config, defaultConfig, filterRules)
17+import Purslint.Rule (Rule)
18+import Purslint.Rules.BooleanSimplify (booleanSimplifyRule)
19+import Purslint.Rules.CollapseLambdas (collapseLambdasRule)
20+import Purslint.Rules.ConcatMap (concatMapRule)
21+import Purslint.Rules.EtaReduce (etaReduceRule)
22+import Purslint.Rules.EtaReduceDecl (etaReduceDeclRule)
23+import Purslint.Rules.MapIdentity (mapIdentityRule)
24+import Purslint.Rules.FunctorLaw (functorLawRule)
25+import Purslint.Rules.LetToDo (letToDoRule)
26+import Purslint.Rules.LetToWhere (letToWhereRule)
27+import Purslint.Rules.MapFusion (mapFusionRule)
28+import Purslint.Rules.MonadLaw (monadLawRule)
29+import Purslint.Rules.MonoidIdentity (monoidIdentityRule)
30+import Purslint.Rules.NotEqual (notEqualRule)
31+import Purslint.Rules.RedundantBind (redundantBindRule)
32+import Purslint.Rules.RedundantFlip (redundantFlipRule)
33+import Purslint.Rules.RedundantIf (redundantIfRule)
34+import Purslint.Rules.RedundantNot (redundantNotRule)
35+import Purslint.Rules.UseAll (useAllRule)
36+import Purslint.Rules.UseAny (useAnyRule)
37+import Purslint.Rules.UseConst (useConstRule)
38+import Purslint.Rules.UseFold (useFoldRule)
39+import Purslint.Rules.UseFromMaybe (useFromMaybeRule)
40+import Purslint.Rules.UseFstSnd (useFstSndRule)
41+import Purslint.Rules.UseGuard (useGuardRule)
42+import Purslint.Rules.UseIsJust (useIsJustRule)
43+import Purslint.Rules.UseIsNothing (useIsNothingRule)
44+import Purslint.Rules.UseJoin (useJoinRule)
45+import Purslint.Rules.UseMinMax (useMinMaxRule)
46+import Purslint.Rules.UseNotElem (useNotElemRule)
47+import Purslint.Rules.UseNull (useNullRule)
48+import Purslint.Rules.UseSequence (useSequenceRule)
49+import Purslint.Rules.UseTraverse (useTraverseRule)
50+import Purslint.Rules.UseTraverseSequence (useTraverseSequenceRule)
51+import Purslint.Rules.UseUnless (useUnlessRule)
52+import Purslint.Rules.UseUnwrap (useUnwrapRule)
53+import Purslint.Rules.UseVoid (useVoidRule)
54+import Purslint.Rules.UseWhen (useWhenRule)
55+import Purslint.Rules.UseMapMaybe (useMapMaybeRule)
56+import Purslint.Rules.UseGuardMaybe (useGuardMaybeRule)
57+import Purslint.Rules.UseMaybeMap (useMaybeMapRule)
58+import Purslint.Rules.UseApplicative (useApplicativeRule)
59+import Purslint.Rules.UseApplyFlipped (useApplyFlippedRule)
60+import Purslint.Rules.UseBindFlip (useBindFlipRule)
61+import Purslint.Rules.UseFor (useForRule)
62+import Purslint.Rules.RedundantGuard (redundantGuardRule)
63+import Purslint.Rules.UseComparing (useComparingRule)
64+import Purslint.Rules.UseOn (useOnRule)
65+import Purslint.Rules.UseFindMap (useFindMapRule)
66+import Purslint.Rules.UseLastReverse (useLastReverseRule)
67+import Purslint.Rules.RedundantReverse (redundantReverseRule)
68+import Purslint.Rules.UseBreak (useBreakRule)
69+import Purslint.Rules.UseSpan (useSpanRule)
70+import Purslint.Rules.UseMinimumSort (useMinimumSortRule)
71+import Purslint.Rules.UseBimap (useBimapRule)
72+import Purslint.Rules.UseDollar (useDollarRule)
73+import Purslint.Rules.UseEitherMap (useEitherMapRule)
74+import Purslint.Rules.AlternativeLaw (alternativeLawRule)
75+import Purslint.Rules.EvaluateBool (evaluateBoolRule)
76+import Purslint.Rules.EvaluateConst (evaluateConstRule)
77+import Purslint.Rules.EvaluateEither (evaluateEitherRule)
78+import Purslint.Rules.EvaluateFst (evaluateFstRule)
79+import Purslint.Rules.UseOr (useOrRule)
80+import Purslint.Rules.UseAnd (useAndRule)
81+import Purslint.Rules.UseFoldMap (useFoldMapRule)
82+import Purslint.Rules.UseFoldMapId (useFoldMapIdRule)
83+import Purslint.Rules.WhenNot (whenNotRule)
84+import Purslint.Rules.UnlessNot (unlessNotRule)
85+import Purslint.Rules.UseZip (useZipRule)
86+import Purslint.Rules.UseReplicate (useReplicateRule)
87+import Purslint.Rules.UseUncurry (useUncurryRule)
88+import Purslint.Rules.RedundantNegate (redundantNegateRule)
89+import Purslint.Rules.UseFromJust (useFromJustRule)
90+import Purslint.Rules.UseHead (useHeadRule)
91+import Purslint.Rules.RedundantId (redundantIdRule)
92+import Purslint.Rules.NothingBind (nothingBindRule)
93+import Purslint.Rules.UseElemIndex (useElemIndexRule)
94+import Purslint.Rules.UseFoldBool (useFoldBoolRule)
95+import Purslint.Rules.UsePatternGuards (usePatternGuardsRule)
96+import Purslint.Rules.UseCaseOf (useCaseOfRule)
97+import Purslint.Rules.FlattenCase (flattenCaseRule)
98+import Purslint.Rules.RedundantParens (redundantParensRule)
99+import Purslint.Runner (runRules)
100+import Purslint.Types (LintResult(..), LintWarning(..), RuleId(..), Severity(..), SourceCode(..), Suggestion(..))
101101import Unsafe.Coerce (unsafeCoerce)
102102
103103-- | All available rules
@@ -208,7 +208,7 @@ warningToDiagnostic (LintWarning w) =
208208 base =
209209 { range: range
210210 , severity: severityToLSP w.severity
211− , source: "purelint"
211+ , source: "purslint"
212212 , message: unwrap w.ruleId <> ": " <> unwrap w.message
213213 }
214214 in case w.suggestion of
@@ -216,7 +216,7 @@ warningToDiagnostic (LintWarning w) =
216216 Just (Suggestion sug) -> unsafeCoerce
217217 { range: range
218218 , severity: severityToLSP w.severity
219− , source: "purelint"
219+ , source: "purslint"
220220 , message: unwrap w.ruleId <> ": " <> unwrap w.message
221221 , data:
222222 { hasFix: true
@@ -273,7 +273,7 @@ mkInitializeResponse reqId =
273273 }
274274 }
275275 , serverInfo:
276− { name: "purelint-lsp"
276+ { name: "purslint-lsp"
277277 , version: "0.1.0"
278278 }
279279 }
@@ -334,32 +334,32 @@ foreign import hasKey :: String -> Foreign -> Boolean
334334foreign import getKey :: String -> Foreign -> Foreign
335335
336336-- | Parse settings to get disabled rules
337−-- | Expected format: { "purelint": { "disabledRules": ["RuleId1", "RuleId2"] } }
338−-- | Or: { "purelint.disabledRules": ["RuleId1", "RuleId2"] }
339−-- | Or: { "purelint.enabled": false } to disable all rules
337+-- | Expected format: { "purslint": { "disabledRules": ["RuleId1", "RuleId2"] } }
338+-- | Or: { "purslint.disabledRules": ["RuleId1", "RuleId2"] }
339+-- | Or: { "purslint.enabled": false } to disable all rules
340340parseSettings :: Foreign -> Config
341341parseSettings settings =
342− -- Try to get purelint.enabled first
343− case getFieldObj "purelint" settings of
344− Just purelintObj ->
342+ -- Try to get purslint.enabled first
343+ case getFieldObj "purslint" settings of
344+ Just purslintObj ->
345345 -- Check if all rules are disabled
346− case getFieldBool "enabled" purelintObj of
346+ case getFieldBool "enabled" purslintObj of
347347 Just false ->
348348 { disabledRules: map (\r -> r.ruleId) allRules } -- Disable all rules
349349 _ ->
350350 -- Get disabled rules list
351− case getFieldArr "disabledRules" purelintObj of
351+ case getFieldArr "disabledRules" purslintObj of
352352 Just arr ->
353353 { disabledRules: Array.mapMaybe parseRuleId arr }
354354 Nothing -> defaultConfig
355355 Nothing ->
356− -- Try flat format: purelint.disabledRules
357− case getFieldArr "purelint.disabledRules" settings of
356+ -- Try flat format: purslint.disabledRules
357+ case getFieldArr "purslint.disabledRules" settings of
358358 Just arr ->
359359 { disabledRules: Array.mapMaybe parseRuleId arr }
360360 Nothing ->
361− -- Try purelint.enabled
362− case getFieldBool "purelint.enabled" settings of
361+ -- Try purslint.enabled
362+ case getFieldBool "purslint.enabled" settings of
363363 Just false ->
364364 { disabledRules: map (\r -> r.ruleId) allRules }
365365 _ -> defaultConfig
@@ -616,7 +616,7 @@ mkDisableRuleAction ruleId diagnostic =
616616 , isPreferred: false
617617 , command:
618618 { title: "Disable rule " <> ruleId
619− , command: "purelint.disableRule"
619+ , command: "purslint.disableRule"
620620 , arguments: [ruleId]
621621 }
622622 }
@@ -644,7 +644,7 @@ mainLoop stateRef = do
644644
645645main :: Effect Unit
646646main = do
647− Stdio.logMessage "purelint-lsp starting..."
647+ Stdio.logMessage "purslint-lsp starting..."
648648 stateRef <- Ref.new { config: defaultConfig, documents: Map.empty }
649649 mainLoop stateRef
650− Stdio.logMessage "purelint-lsp exiting"
650+ Stdio.logMessage "purslint-lsp exiting"
bin/purelint-lsp/src/LSP/Stdio.js → bin/purslint-lsp/src/LSP/Stdio.jsrenamed+1−1
@@ -74,7 +74,7 @@ export const writeMessage = (msg) => () => {
7474
7575// Log a message to stderr (for debugging)
7676export const logMessage = (msg) => () => {
77− process.stderr.write('[purelint-lsp] ' + msg + '\n');
77+ process.stderr.write('[purslint-lsp] ' + msg + '\n');
7878};
7979
8080// Parse JSON string to Foreign (returns Maybe Foreign)
bin/purelint-lsp/src/LSP/Stdio.purs → bin/purslint-lsp/src/LSP/Stdio.pursrenamed

The content is the same.

bin/purelint-lsp/src/Main.purs → bin/purslint-lsp/src/Main.pursrenamed+1−1
@@ -2,7 +2,7 @@ module Main.LSP where
22
33import Prelude
44import Effect (Effect)
5−import Purelint.LSP as LSP
5+import Purslint.LSP as LSP
66
77main :: Effect Unit
88main = LSP.main
bin/purslint.jsnew file+2
@@ -0,0 +1,2 @@
1+#!/usr/bin/env node
2+import "../dist/purslint.js";
demo.gifnew file

Binary file not shown.

docs/IMPORT_CHECKING_PLAN.md+8−8
@@ -6,7 +6,7 @@ Make lint rules safer by verifying that identifiers like `map`, `identity`, `<$>
66
77## Current State
88
9−- `Purelint.Imports` module exists with:
9+- `Purslint.Imports` module exists with:
1010 - `getImportInfo :: Module Void -> ImportInfo` - extracts import info from a module
1111 - `hasValue :: ImportInfo -> String -> Boolean` - check if a value is imported
1212 - `hasOp :: ImportInfo -> String -> Boolean` - check if an operator is imported
@@ -18,7 +18,7 @@ Make lint rules safer by verifying that identifiers like `map`, `identity`, `<$>
1818### Step 1: Update Rule type to receive ImportInfo
1919
2020```purescript
21−-- In Purelint/Rule.purs
21+-- In Purslint/Rule.purs
2222type RuleContext =
2323 { imports :: ImportInfo
2424 }
@@ -34,7 +34,7 @@ mkRule :: RuleId -> (RuleContext -> Module Void -> Array LintWarning) -> Rule
3434### Step 2: Update Runner to pass context
3535
3636```purescript
37−-- In Purelint/Runner.purs
37+-- In Purslint/Runner.purs
3838runRules :: Array Rule -> SourceCode -> Either String LintResult
3939runRules rules (SourceCode source) = do
4040 mod <- parseModule source
@@ -96,11 +96,11 @@ All rules that check for specific identifiers:
9696
9797## Files to Modify
9898
99−1. `lib/purelint/src/Purelint/Rule.purs` - Add RuleContext
100−2. `lib/purelint/src/Purelint/Runner.purs` - Pass context to rules
101−3. `lib/purelint/src/Purelint/Rules/*.purs` - All 9 rule files
102−4. `bin/purelint-cli/src/Main.purs` - No changes needed (uses Runner)
103−5. `bin/purelint-lsp/src/LSP.purs` - No changes needed (uses Runner)
99+1. `lib/purslint/src/Purslint/Rule.purs` - Add RuleContext
100+2. `lib/purslint/src/Purslint/Runner.purs` - Pass context to rules
101+3. `lib/purslint/src/Purslint/Rules/*.purs` - All 9 rule files
102+4. `bin/purslint-cli/src/Main.purs` - No changes needed (uses Runner)
103+5. `bin/purslint-lsp/src/LSP.purs` - No changes needed (uses Runner)
104104
105105## Testing
106106
lib/purelint/spago.yaml → lib/purslint/spago.yamlrenamed+1−1
@@ -1,5 +1,5 @@
11package:
2− name: purelint
2+ name: purslint
33 dependencies:
44 - arrays
55 - effect
lib/purelint/src/Purelint/Config.purs → lib/purslint/src/Purslint/Config.pursrenamed+2−2
@@ -1,11 +1,11 @@
1−module Purelint.Config where
1+module Purslint.Config where
22
33import Prelude
44
55import Data.Array (notElem)
66import Data.Array as Array
77import Data.String as String
8−import Purelint.Types (RuleId(..))
8+import Purslint.Types (RuleId(..))
99
1010-- | Parsed config - just enabled/disabled rules for now
1111type Config =
lib/purelint/src/Purelint/Fix.purs → lib/purslint/src/Purslint/Fix.pursrenamed+15−12
@@ -1,4 +1,4 @@
1−module Purelint.Fix where
1+module Purslint.Fix where
22
33import Prelude
44
@@ -10,8 +10,8 @@ import Data.Newtype (un, unwrap)
1010import Data.String as String
1111import Data.String.CodeUnits as StringCU
1212import PureScript.CST.Types (SourceRange)
13−import Purelint.Types (LintResult(..), LintWarning(..), ReplacementText(..), Suggestion(..))
14−import Purelint.ImportFix (processImports)
13+import Purslint.Types (LintResult(..), LintWarning(..), ReplacementText(..), Suggestion(..))
14+import Purslint.ImportFix (processImports)
1515
1616-- | Extract text at a source range from source code
1717extractRange :: String -> SourceRange -> String
@@ -71,8 +71,9 @@ applyFix :: String -> LintWarning -> Maybe String
7171applyFix source (LintWarning w) = do
7272 Suggestion s <- w.suggestion
7373 let replacement = s.replacement # un ReplacementText
74− let { source: updatedSource, replacement: updatedReplacement, linesAdded } =
75− processImports source replacement s.requiredImports
74+ let
75+ { source: updatedSource, replacement: updatedReplacement, linesAdded } =
76+ processImports source replacement s.requiredImports
7677 let shiftedRange = shiftRange linesAdded w.range
7778 Just $ replaceRange updatedSource shiftedRange updatedReplacement
7879
@@ -101,13 +102,15 @@ applyAllFixes source (LintResult result) =
101102 else case w.suggestion of
102103 Nothing -> acc
103104 Just (Suggestion s) ->
104− let replacement = s.replacement # un ReplacementText
105− importResult = processImports acc.source replacement s.requiredImports
106− shiftedRange = shiftRange importResult.linesAdded w.range
107− updatedSource = replaceRange importResult.source shiftedRange importResult.replacement
108− in { source: updatedSource
109− , appliedRanges: Array.cons shiftedRange acc.appliedRanges
110− }
105+ let
106+ replacement = s.replacement # un ReplacementText
107+ importResult = processImports acc.source replacement s.requiredImports
108+ shiftedRange = shiftRange importResult.linesAdded w.range
109+ updatedSource = replaceRange importResult.source shiftedRange importResult.replacement
110+ in
111+ { source: updatedSource
112+ , appliedRanges: Array.cons shiftedRange acc.appliedRanges
113+ }
111114
112115 -- Check if two ranges overlap
113116 overlaps :: SourceRange -> SourceRange -> Boolean
lib/purelint/src/Purelint/ImportFix.purs → lib/purslint/src/Purslint/ImportFix.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Purelint.ImportFix where
1+module Purslint.ImportFix where
22
33import Data.Maybe (Maybe)
44-- NOTE: Import processing is currently a no-op. We assume required imports
lib/purelint/src/Purelint/Imports.purs → lib/purslint/src/Purslint/Imports.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Purelint.Imports where
1+module Purslint.Imports where
22
33import Prelude
44
lib/purelint/src/Purelint/Print.purs → lib/purslint/src/Purslint/Print.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Purelint.Print where
1+module Purslint.Print where
22
33import Prelude
44
lib/purelint/src/Purelint/Rule.purs → lib/purslint/src/Purslint/Rule.pursrenamed+3−3
@@ -1,9 +1,9 @@
1−module Purelint.Rule where
1+module Purslint.Rule where
22
33import Prelude
44
5−import Purelint.Imports (ImportInfo)
6−import Purelint.Types (LintWarning, RuleId)
5+import Purslint.Imports (ImportInfo)
6+import Purslint.Types (LintWarning, RuleId)
77import PureScript.CST.Types (Module)
88import Data.Void (Void)
99
lib/purelint/src/Purelint/Rules/AlternativeLaw.purs → lib/purslint/src/Purslint/Rules/AlternativeLaw.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.AlternativeLaw where
1+module Purslint.Rules.AlternativeLaw where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
8−import Purelint.Imports (ImportInfo, hasValue, hasOp)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue, hasOp)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Proper(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/BooleanSimplify.purs → lib/purslint/src/Purslint/Rules/BooleanSimplify.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.BooleanSimplify where
1+module Purslint.Rules.BooleanSimplify where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (Expr(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/CollapseLambdas.purs → lib/purslint/src/Purslint/Rules/CollapseLambdas.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.CollapseLambdas where
1+module Purslint.Rules.CollapseLambdas where
22
33import Prelude
44
@@ -6,9 +6,9 @@ import Data.Array as Array
66import Data.Array.NonEmpty as NEA
77import Data.Maybe (Maybe(..))
88import Data.String as String
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (Binder(..), Expr(..), Ident(..), Module, Name(..))
lib/purelint/src/Purelint/Rules/ConcatMap.purs → lib/purslint/src/Purslint/Rules/ConcatMap.pursrenamed+5−5
@@ -1,13 +1,13 @@
1−module Purelint.Rules.ConcatMap where
1+module Purslint.Rules.ConcatMap where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/EtaReduce.purs → lib/purslint/src/Purslint/Rules/EtaReduce.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.EtaReduce where
1+module Purslint.Rules.EtaReduce where
22
33import Prelude
44
55import Data.Array as Array
66import Data.Array.NonEmpty as NEA
77import Data.Maybe (Maybe(..))
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Binder(..), Expr(..), Ident(..), Module, Name(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/EtaReduceDecl.purs → lib/purslint/src/Purslint/Rules/EtaReduceDecl.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.EtaReduceDecl where
1+module Purslint.Rules.EtaReduceDecl where
22
33import Prelude
44
@@ -7,9 +7,9 @@ import Data.Array.NonEmpty as NEA
77import Data.Maybe (Maybe(..))
88import Data.String as String
99import Data.Void (Void)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types as CST
lib/purelint/src/Purelint/Rules/EvaluateBool.purs → lib/purslint/src/Purslint/Rules/EvaluateBool.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.EvaluateBool where
1+module Purslint.Rules.EvaluateBool where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
8−import Purelint.Imports (ImportInfo, hasOp)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasOp)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (Expr(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/EvaluateConst.purs → lib/purslint/src/Purslint/Rules/EvaluateConst.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.EvaluateConst where
1+module Purslint.Rules.EvaluateConst where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..))
lib/purelint/src/Purelint/Rules/EvaluateEither.purs → lib/purslint/src/Purslint/Rules/EvaluateEither.pursrenamed+5−5
@@ -1,13 +1,13 @@
1−module Purelint.Rules.EvaluateEither where
1+module Purslint.Rules.EvaluateEither where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Proper(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/EvaluateFst.purs → lib/purslint/src/Purslint/Rules/EvaluateFst.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.EvaluateFst where
1+module Purslint.Rules.EvaluateFst where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Proper(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/FlattenCase.purs → lib/purslint/src/Purslint/Rules/FlattenCase.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.FlattenCase where
1+module Purslint.Rules.FlattenCase where
22
33import Prelude
44
@@ -8,9 +8,9 @@ import Data.Maybe (Maybe(..))
88import Data.String as String
99import Data.Tuple (Tuple(..))
1010import Data.Void (Void)
11−import Purelint.Print (printBinder, printExpr)
12−import Purelint.Rule (Rule, RuleContext, mkRule)
13−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
11+import Purslint.Print (printBinder, printExpr)
12+import Purslint.Rule (Rule, RuleContext, mkRule)
13+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1414import PureScript.CST.Range (rangeOf)
1515import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1616import PureScript.CST.Types (Binder(..), Expr(..), Guarded(..), Module, Separated(..), Where(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/FunctorLaw.purs → lib/purslint/src/Purslint/Rules/FunctorLaw.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.FunctorLaw where
1+module Purslint.Rules.FunctorLaw where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/LetToDo.purs → lib/purslint/src/Purslint/Rules/LetToDo.pursrenamed+3−3
@@ -1,4 +1,4 @@
1−module Purelint.Rules.LetToDo where
1+module Purslint.Rules.LetToDo where
22
33import Prelude
44
@@ -11,8 +11,8 @@ import Data.String (joinWith) as String
1111import Data.String as Str
1212import Data.Tuple.Nested ((/\))
1313import Data.Void (Void, absurd)
14−import Purelint.Rule (Rule, RuleContext, mkRule)
15−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
14+import Purslint.Rule (Rule, RuleContext, mkRule)
15+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1616import PureScript.CST.Print (printToken)
1717import PureScript.CST.Range (rangeOf, tokensOf)
1818import PureScript.CST.Range.TokenList as TokenList
lib/purelint/src/Purelint/Rules/LetToWhere.purs → lib/purslint/src/Purslint/Rules/LetToWhere.pursrenamed+3−3
@@ -1,4 +1,4 @@
1−module Purelint.Rules.LetToWhere where
1+module Purslint.Rules.LetToWhere where
22
33import Prelude
44
@@ -10,8 +10,8 @@ import Data.Monoid (power)
1010import Data.String (joinWith) as String
1111import Data.String as Str
1212import Data.Tuple.Nested ((/\))
13−import Purelint.Rule (Rule, RuleContext, mkRule)
14−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
13+import Purslint.Rule (Rule, RuleContext, mkRule)
14+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1515import PureScript.CST.Print (printToken)
1616import PureScript.CST.Range (class RangeOf, rangeOf, tokensOf)
1717import PureScript.CST.Range.TokenList as TokenList
lib/purelint/src/Purelint/Rules/MapFusion.purs → lib/purslint/src/Purslint/Rules/MapFusion.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.MapFusion where
1+module Purslint.Rules.MapFusion where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/MapIdentity.purs → lib/purslint/src/Purslint/Rules/MapIdentity.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.MapIdentity where
1+module Purslint.Rules.MapIdentity where
22
33import Prelude
44
@@ -7,10 +7,10 @@ import Data.Array.NonEmpty as NEA
77import Data.Maybe (Maybe(..))
88import Data.Tuple (Tuple(..))
99import Data.Void (Void)
10−import Purelint.Imports (ImportInfo, hasValue, hasOp)
11−import Purelint.Print (printExpr)
12−import Purelint.Rule (Rule, RuleContext, mkRule)
13−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
10+import Purslint.Imports (ImportInfo, hasValue, hasOp)
11+import Purslint.Print (printExpr)
12+import Purslint.Rule (Rule, RuleContext, mkRule)
13+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1414import PureScript.CST.Range (rangeOf)
1515import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1616import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/MonadLaw.purs → lib/purslint/src/Purslint/Rules/MonadLaw.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.MonadLaw where
1+module Purslint.Rules.MonadLaw where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
8−import Purelint.Imports (ImportInfo, hasValue, hasOp)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue, hasOp)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/MonoidIdentity.purs → lib/purslint/src/Purslint/Rules/MonoidIdentity.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.MonoidIdentity where
1+module Purslint.Rules.MonoidIdentity where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (Expr(..), Ident(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/NotEqual.purs → lib/purslint/src/Purslint/Rules/NotEqual.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.NotEqual where
1+module Purslint.Rules.NotEqual where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
8−import Purelint.Imports (ImportInfo, hasValue, hasOp)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue, hasOp)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/NothingBind.purs → lib/purslint/src/Purslint/Rules/NothingBind.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.NothingBind where
1+module Purslint.Rules.NothingBind where
22
33import Prelude
44
@@ -6,9 +6,9 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasOp)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasOp)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (Expr(..), Ident(..), Module, Operator(..), Proper(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/RedundantBind.purs → lib/purslint/src/Purslint/Rules/RedundantBind.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.RedundantBind where
1+module Purslint.Rules.RedundantBind where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
8−import Purelint.Imports (ImportInfo, hasValue, hasOp)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue, hasOp)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/RedundantFlip.purs → lib/purslint/src/Purslint/Rules/RedundantFlip.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.RedundantFlip where
1+module Purslint.Rules.RedundantFlip where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/RedundantGuard.purs → lib/purslint/src/Purslint/Rules/RedundantGuard.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.RedundantGuard where
1+module Purslint.Rules.RedundantGuard where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/RedundantId.purs → lib/purslint/src/Purslint/Rules/RedundantId.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.RedundantId where
1+module Purslint.Rules.RedundantId where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/RedundantIf.purs → lib/purslint/src/Purslint/Rules/RedundantIf.pursrenamed+5−5
@@ -1,13 +1,13 @@
1−module Purelint.Rules.RedundantIf where
1+module Purslint.Rules.RedundantIf where
22
33import Prelude
44
55import Data.Maybe (Maybe(..))
66import Data.Void (Void)
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (Expr(..), Module)
lib/purelint/src/Purelint/Rules/RedundantNegate.purs → lib/purslint/src/Purslint/Rules/RedundantNegate.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.RedundantNegate where
1+module Purslint.Rules.RedundantNegate where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/RedundantNot.purs → lib/purslint/src/Purslint/Rules/RedundantNot.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.RedundantNot where
1+module Purslint.Rules.RedundantNot where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/RedundantParens.purs → lib/purslint/src/Purslint/Rules/RedundantParens.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.RedundantParens where
1+module Purslint.Rules.RedundantParens where
22
33import Prelude
44
@@ -7,9 +7,9 @@ import Data.Array.NonEmpty as NEA
77import Data.Maybe (Maybe(..))
88import Data.Tuple (snd)
99import Data.Tuple.Nested ((/\))
10−import Purelint.Print (printBinder, printExpr, printType)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
10+import Purslint.Print (printBinder, printExpr, printType)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Binder(..), Declaration(..), DoStatement(..), Expr(..), Guarded(..), GuardedExpr(..), Labeled(..), LetBinding(..), Module, RecordLabeled(..), Row(..), Separated(..), Type(..), ValueBindingFields, Where(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/RedundantReverse.purs → lib/purslint/src/Purslint/Rules/RedundantReverse.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.RedundantReverse where
1+module Purslint.Rules.RedundantReverse where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UnlessNot.purs → lib/purslint/src/Purslint/Rules/UnlessNot.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UnlessNot where
1+module Purslint.Rules.UnlessNot where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseAll.purs → lib/purslint/src/Purslint/Rules/UseAll.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseAll where
1+module Purslint.Rules.UseAll where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseAnd.purs → lib/purslint/src/Purslint/Rules/UseAnd.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseAnd where
1+module Purslint.Rules.UseAnd where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseAny.purs → lib/purslint/src/Purslint/Rules/UseAny.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseAny where
1+module Purslint.Rules.UseAny where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseApplicative.purs → lib/purslint/src/Purslint/Rules/UseApplicative.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseApplicative where
1+module Purslint.Rules.UseApplicative where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseApplyFlipped.purs → lib/purslint/src/Purslint/Rules/UseApplyFlipped.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseApplyFlipped where
1+module Purslint.Rules.UseApplyFlipped where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Print (printExprNoComments)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Print (printExprNoComments)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Module, Wrapped(..))
lib/purelint/src/Purelint/Rules/UseBimap.purs → lib/purslint/src/Purslint/Rules/UseBimap.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseBimap where
1+module Purslint.Rules.UseBimap where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseBindFlip.purs → lib/purslint/src/Purslint/Rules/UseBindFlip.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseBindFlip where
1+module Purslint.Rules.UseBindFlip where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseBreak.purs → lib/purslint/src/Purslint/Rules/UseBreak.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseBreak where
1+module Purslint.Rules.UseBreak where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseCaseOf.purs → lib/purslint/src/Purslint/Rules/UseCaseOf.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseCaseOf where
1+module Purslint.Rules.UseCaseOf where
22
33import Prelude
44
@@ -11,9 +11,9 @@ import Data.String as String
1111import Data.Tuple (Tuple(..))
1212import Data.Tuple.Nested ((/\))
1313import Data.Void (Void, absurd)
14−import Purelint.Print (printBinder, printExpr)
15−import Purelint.Rule (Rule, RuleContext, mkRule)
16−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
14+import Purslint.Print (printBinder, printExpr)
15+import Purslint.Rule (Rule, RuleContext, mkRule)
16+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1717import PureScript.CST.Print (printToken)
1818import PureScript.CST.Range (rangeOf, tokensOf)
1919import PureScript.CST.Range.TokenList as TokenList
lib/purelint/src/Purelint/Rules/UseComparing.purs → lib/purslint/src/Purslint/Rules/UseComparing.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseComparing where
1+module Purslint.Rules.UseComparing where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Binder(..), Expr(..), Ident(..), Module, Name(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseConst.purs → lib/purslint/src/Purslint/Rules/UseConst.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseConst where
1+module Purslint.Rules.UseConst where
22
33import Prelude
44
@@ -8,10 +8,10 @@ import Data.Maybe (Maybe(..))
88import Data.Monoid (power)
99import Data.String as String
1010import Data.Void (Void)
11−import Purelint.Imports (ImportInfo, hasValue)
12−import Purelint.Print (printExpr, printExprMultiline)
13−import Purelint.Rule (Rule, RuleContext, mkRule)
14−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
11+import Purslint.Imports (ImportInfo, hasValue)
12+import Purslint.Print (printExpr, printExprMultiline)
13+import Purslint.Rule (Rule, RuleContext, mkRule)
14+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1515import PureScript.CST.Range (rangeOf)
1616import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1717import PureScript.CST.Types (Binder(..), Expr(..), Module)
lib/purelint/src/Purelint/Rules/UseDollar.purs → lib/purslint/src/Purslint/Rules/UseDollar.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseDollar where
1+module Purslint.Rules.UseDollar where
22
33import Prelude
44
55import Data.Array as Array
66import Data.Array.NonEmpty as NEA
77import Data.Maybe (Maybe(..))
8−import Purelint.Print (printExpr, printType)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Print (printExpr, printType)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Module, Wrapped(..))
lib/purelint/src/Purelint/Rules/UseEitherMap.purs → lib/purslint/src/Purslint/Rules/UseEitherMap.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseEitherMap where
1+module Purslint.Rules.UseEitherMap where
22
33import Prelude
44
@@ -10,10 +10,10 @@ import Data.Void (Void)
1010import PureScript.CST.Range (rangeOf)
1111import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1212import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
13−import Purelint.Imports (ImportInfo, hasValue)
14−import Purelint.Print (printExpr)
15−import Purelint.Rule (Rule, RuleContext, mkRule)
16−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
13+import Purslint.Imports (ImportInfo, hasValue)
14+import Purslint.Print (printExpr)
15+import Purslint.Rule (Rule, RuleContext, mkRule)
16+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1717
1818-- | Rule: either Left (Right <<< f) -> map f
1919useEitherMapRule :: Rule
lib/purelint/src/Purelint/Rules/UseElemIndex.purs → lib/purslint/src/Purslint/Rules/UseElemIndex.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseElemIndex where
1+module Purslint.Rules.UseElemIndex where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Binder(..), Expr(..), Ident(..), Module, Name(..), Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseFindMap.purs → lib/purslint/src/Purslint/Rules/UseFindMap.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseFindMap where
1+module Purslint.Rules.UseFindMap where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseFold.purs → lib/purslint/src/Purslint/Rules/UseFold.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseFold where
1+module Purslint.Rules.UseFold where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseFoldBool.purs → lib/purslint/src/Purslint/Rules/UseFoldBool.pursrenamed+4−4
@@ -1,12 +1,12 @@
1−module Purelint.Rules.UseFoldBool where
1+module Purslint.Rules.UseFoldBool where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Rule (Rule, RuleContext, mkRule)
9−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Rule (Rule, RuleContext, mkRule)
9+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1010import PureScript.CST.Range (rangeOf)
1111import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1212import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseFoldMap.purs → lib/purslint/src/Purslint/Rules/UseFoldMap.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseFoldMap where
1+module Purslint.Rules.UseFoldMap where
22
33import Prelude
44
@@ -9,9 +9,9 @@ import Data.Monoid (power)
99import Data.Tuple (Tuple, snd)
1010import Data.Tuple.Nested ((/\))
1111import Data.String as String
12−import Purelint.Print (printExpr, printExprMultiline)
13−import Purelint.Rule (Rule, RuleContext, mkRule)
14−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
12+import Purslint.Print (printExpr, printExprMultiline)
13+import Purslint.Rule (Rule, RuleContext, mkRule)
14+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1515import PureScript.CST.Range (rangeOf)
1616import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1717import PureScript.CST.Types (Binder(..), Expr(..), Guarded(..), Ident(..), Module, Name(..), Proper(..), QualifiedName(..), Separated(..), Where(..), Wrapped(..), AppSpine(..))
lib/purelint/src/Purelint/Rules/UseFoldMapId.purs → lib/purslint/src/Purslint/Rules/UseFoldMapId.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseFoldMapId where
1+module Purslint.Rules.UseFoldMapId where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseFor.purs → lib/purslint/src/Purslint/Rules/UseFor.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseFor where
1+module Purslint.Rules.UseFor where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseFromJust.purs → lib/purslint/src/Purslint/Rules/UseFromJust.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseFromJust where
1+module Purslint.Rules.UseFromJust where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Proper(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseFromMaybe.purs → lib/purslint/src/Purslint/Rules/UseFromMaybe.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseFromMaybe where
1+module Purslint.Rules.UseFromMaybe where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseFstSnd.purs → lib/purslint/src/Purslint/Rules/UseFstSnd.pursrenamed+3−3
@@ -1,12 +1,12 @@
1−module Purelint.Rules.UseFstSnd where
1+module Purslint.Rules.UseFstSnd where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Rule (Rule, RuleContext, mkRule)
9−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Rule (Rule, RuleContext, mkRule)
9+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1010import PureScript.CST.Range (rangeOf)
1111import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1212import PureScript.CST.Types (Binder(..), Expr(..), Ident(..), Module, Name(..), Proper(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseGuard.purs → lib/purslint/src/Purslint/Rules/UseGuard.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseGuard where
1+module Purslint.Rules.UseGuard where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseGuardMaybe.purs → lib/purslint/src/Purslint/Rules/UseGuardMaybe.pursrenamed+5−5
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseGuardMaybe where
1+module Purslint.Rules.UseGuardMaybe where
22
33import Prelude
44
55import Data.Maybe (Maybe(..))
66import Data.Void (Void)
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseHead.purs → lib/purslint/src/Purslint/Rules/UseHead.pursrenamed+4−4
@@ -1,12 +1,12 @@
1−module Purelint.Rules.UseHead where
1+module Purslint.Rules.UseHead where
22
33import Prelude
44
55import Data.Maybe (Maybe(..))
66import Data.Void (Void)
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Rule (Rule, RuleContext, mkRule)
9−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Rule (Rule, RuleContext, mkRule)
9+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1010import PureScript.CST.Range (rangeOf)
1111import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1212import PureScript.CST.Types (Expr(..), Ident(..), IntValue(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseIsJust.purs → lib/purslint/src/Purslint/Rules/UseIsJust.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseIsJust where
1+module Purslint.Rules.UseIsJust where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseIsNothing.purs → lib/purslint/src/Purslint/Rules/UseIsNothing.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseIsNothing where
1+module Purslint.Rules.UseIsNothing where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseJoin.purs → lib/purslint/src/Purslint/Rules/UseJoin.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseJoin where
1+module Purslint.Rules.UseJoin where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (Expr(..), Ident(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseLastReverse.purs → lib/purslint/src/Purslint/Rules/UseLastReverse.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseLastReverse where
1+module Purslint.Rules.UseLastReverse where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseMapMaybe.purs → lib/purslint/src/Purslint/Rules/UseMapMaybe.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseMapMaybe where
1+module Purslint.Rules.UseMapMaybe where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseMaybeMap.purs → lib/purslint/src/Purslint/Rules/UseMaybeMap.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseMaybeMap where
1+module Purslint.Rules.UseMaybeMap where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseMinMax.purs → lib/purslint/src/Purslint/Rules/UseMinMax.pursrenamed+5−5
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseMinMax where
1+module Purslint.Rules.UseMinMax where
22
33import Prelude
44
55import Data.Maybe (Maybe(..))
66import Data.Void (Void)
7−import Purelint.Imports (ImportInfo, hasOp)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasOp)
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseMinimumSort.purs → lib/purslint/src/Purslint/Rules/UseMinimumSort.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseMinimumSort where
1+module Purslint.Rules.UseMinimumSort where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseNotElem.purs → lib/purslint/src/Purslint/Rules/UseNotElem.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseNotElem where
1+module Purslint.Rules.UseNotElem where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseNull.purs → lib/purslint/src/Purslint/Rules/UseNull.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseNull where
1+module Purslint.Rules.UseNull where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), IntValue(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseOn.purs → lib/purslint/src/Purslint/Rules/UseOn.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseOn where
1+module Purslint.Rules.UseOn where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Binder(..), Expr(..), Ident(..), Module, Name(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseOr.purs → lib/purslint/src/Purslint/Rules/UseOr.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseOr where
1+module Purslint.Rules.UseOr where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UsePatternGuards.purs → lib/purslint/src/Purslint/Rules/UsePatternGuards.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UsePatternGuards where
1+module Purslint.Rules.UsePatternGuards where
22
33import Prelude
44
@@ -15,9 +15,9 @@ import PureScript.CST.Range (rangeOf, tokensOf)
1515import PureScript.CST.Range.TokenList as TokenList
1616import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1717import PureScript.CST.Types (Binder(..), Expr(..), Guarded(..), GuardedExpr(..), Module, PatternGuard(..), Separated(..), Where(..), Wrapped(..))
18−import Purelint.Print (printBinder, printExpr, printExprMultiline)
19−import Purelint.Rule (Rule, RuleContext, mkRule)
20−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
18+import Purslint.Print (printBinder, printExpr, printExprMultiline)
19+import Purslint.Rule (Rule, RuleContext, mkRule)
20+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
2121
2222-- | Rule: Nested case expressions with single match + fallback can use pattern guards
2323-- |
lib/purelint/src/Purelint/Rules/UseReplicate.purs → lib/purslint/src/Purslint/Rules/UseReplicate.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseReplicate where
1+module Purslint.Rules.UseReplicate where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseSequence.purs → lib/purslint/src/Purslint/Rules/UseSequence.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseSequence where
1+module Purslint.Rules.UseSequence where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseSpan.purs → lib/purslint/src/Purslint/Rules/UseSpan.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseSpan where
1+module Purslint.Rules.UseSpan where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseTraverse.purs → lib/purslint/src/Purslint/Rules/UseTraverse.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseTraverse where
1+module Purslint.Rules.UseTraverse where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array as Array
66import Data.Array.NonEmpty as NEA
77import Data.Maybe (Maybe(..))
88import Data.Tuple (Tuple(..))
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseTraverseSequence.purs → lib/purslint/src/Purslint/Rules/UseTraverseSequence.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseTraverseSequence where
1+module Purslint.Rules.UseTraverseSequence where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseUncurry.purs → lib/purslint/src/Purslint/Rules/UseUncurry.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseUncurry where
1+module Purslint.Rules.UseUncurry where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Proper(..), QualifiedName(..), Separated(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/UseUnless.purs → lib/purslint/src/Purslint/Rules/UseUnless.pursrenamed+5−5
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseUnless where
1+module Purslint.Rules.UseUnless where
22
33import Prelude
44
55import Data.Maybe (Maybe(..))
66import Data.Void (Void)
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (Expr(..), Ident(..), Module, QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseUnwrap.purs → lib/purslint/src/Purslint/Rules/UseUnwrap.pursrenamed+4−4
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseUnwrap where
1+module Purslint.Rules.UseUnwrap where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseVoid.purs → lib/purslint/src/Purslint/Rules/UseVoid.pursrenamed+5−5
@@ -1,4 +1,4 @@
1−module Purelint.Rules.UseVoid where
1+module Purslint.Rules.UseVoid where
22
33import Prelude
44
@@ -6,10 +6,10 @@ import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Tuple (Tuple(..))
88import Data.Void (Void)
9−import Purelint.Imports (ImportInfo, hasValue, hasOp)
10−import Purelint.Print (printExpr)
11−import Purelint.Rule (Rule, RuleContext, mkRule)
12−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
9+import Purslint.Imports (ImportInfo, hasValue, hasOp)
10+import Purslint.Print (printExpr)
11+import Purslint.Rule (Rule, RuleContext, mkRule)
12+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1313import PureScript.CST.Range (rangeOf)
1414import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1515import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Operator(..), QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseWhen.purs → lib/purslint/src/Purslint/Rules/UseWhen.pursrenamed+5−5
@@ -1,13 +1,13 @@
1−module Purelint.Rules.UseWhen where
1+module Purslint.Rules.UseWhen where
22
33import Prelude
44
55import Data.Maybe (Maybe(..))
66import Data.Void (Void)
7−import Purelint.Imports (ImportInfo, hasValue)
8−import Purelint.Print (printExpr)
9−import Purelint.Rule (Rule, RuleContext, mkRule)
10−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
7+import Purslint.Imports (ImportInfo, hasValue)
8+import Purslint.Print (printExpr)
9+import Purslint.Rule (Rule, RuleContext, mkRule)
10+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1111import PureScript.CST.Range (rangeOf)
1212import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1313import PureScript.CST.Types (Expr(..), Ident(..), Module, QualifiedName(..))
lib/purelint/src/Purelint/Rules/UseZip.purs → lib/purslint/src/Purslint/Rules/UseZip.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.UseZip where
1+module Purslint.Rules.UseZip where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, Proper(..), QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Rules/WhenNot.purs → lib/purslint/src/Purslint/Rules/WhenNot.pursrenamed+5−5
@@ -1,14 +1,14 @@
1−module Purelint.Rules.WhenNot where
1+module Purslint.Rules.WhenNot where
22
33import Prelude
44
55import Data.Array.NonEmpty as NEA
66import Data.Maybe (Maybe(..))
77import Data.Void (Void)
8−import Purelint.Imports (ImportInfo, hasValue)
9−import Purelint.Print (printExpr)
10−import Purelint.Rule (Rule, RuleContext, mkRule)
11−import Purelint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
8+import Purslint.Imports (ImportInfo, hasValue)
9+import Purslint.Print (printExpr)
10+import Purslint.Rule (Rule, RuleContext, mkRule)
11+import Purslint.Types (LintWarning(..), RuleId(..), Severity(..), Suggestion(..), SuggestionDescription(..), ReplacementText(..), WarningMessage(..))
1212import PureScript.CST.Range (rangeOf)
1313import PureScript.CST.Traversal (defaultMonoidalVisitor, foldMapModule)
1414import PureScript.CST.Types (AppSpine(..), Expr(..), Ident(..), Module, QualifiedName(..), Wrapped(..))
lib/purelint/src/Purelint/Runner.purs → lib/purslint/src/Purslint/Runner.pursrenamed+4−4
@@ -1,4 +1,4 @@
1−module Purelint.Runner where
1+module Purslint.Runner where
22
33import Prelude
44
@@ -8,9 +8,9 @@ import Data.Newtype (un, unwrap)
88import PureScript.CST (RecoveredParserResult(..), parseModule)
99import PureScript.CST.Errors (printParseError)
1010import PureScript.CST.Types (ImportDecl(..), Module(..), ModuleHeader(..), ModuleName(..), Name(..))
11−import Purelint.Imports (getImportInfo, ImportInfo)
12−import Purelint.Rule (Rule, RuleContext)
13−import Purelint.Types (LintResult(..), SourceCode(..))
11+import Purslint.Imports (getImportInfo, ImportInfo)
12+import Purslint.Rule (Rule, RuleContext)
13+import Purslint.Types (LintResult(..), SourceCode(..))
1414import Unsafe.Coerce (unsafeCoerce)
1515
1616-- | Run a set of rules on source code
lib/purelint/src/Purelint/Tidy.js → lib/purslint/src/Purslint/Tidy.jsrenamed

The content is the same.

lib/purelint/src/Purelint/Tidy.purs → lib/purslint/src/Purslint/Tidy.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Purelint.Tidy where
1+module Purslint.Tidy where
22
33import Prelude
44
lib/purelint/src/Purelint/Types.purs → lib/purslint/src/Purslint/Types.pursrenamed+1−1
@@ -1,4 +1,4 @@
1−module Purelint.Types where
1+module Purslint.Types where
22
33import Prelude
44
package.json+13−6
@@ -4,15 +4,15 @@
44 "description": "A linter for PureScript",
55 "type": "module",
66 "bin": {
7− "purelint": "./dist/purelint.js",
8− "purelint-lsp": "./dist/purelint-lsp.js"
7+ "purslint": "./bin/purslint.js",
8+ "purslint-lsp": "./bin/purslint-lsp.js"
99 },
1010 "scripts": {
11− "build:cli": "spago build -p purelint-cli --output output-cli",
12− "build:lsp": "spago build -p purelint-lsp --output output-lsp",
11+ "build:cli": "spago build -p purslint-cli --output output-cli",
12+ "build:lsp": "spago build -p purslint-lsp --output output-lsp",
1313 "build": "npm run build:cli && npm run build:lsp",
14− "bundle:cli": "purs-backend-es bundle-app --corefn-dir output-cli --main Main --platform node --to dist/purelint.js --int-tags",
15− "bundle:lsp": "purs-backend-es bundle-app --corefn-dir output-lsp --main Main.LSP --platform node --to dist/purelint-lsp.js --int-tags",
14+ "bundle:cli": "purs-backend-es bundle-app --corefn-dir output-cli --main Main --platform node --to dist/purslint.js --int-tags",
15+ "bundle:lsp": "purs-backend-es bundle-app --corefn-dir output-lsp --main Main.LSP --platform node --to dist/purslint-lsp.js --int-tags",
1616 "bundle": "npm run bundle:cli && npm run bundle:lsp",
1717 "dist": "npm run build && npm run bundle",
1818 "test": "spago test",
@@ -32,11 +32,18 @@
3232 "bugs": {
3333 "url": "https://github.com/rowtype-yoga/purslint/issues"
3434 },
35+ "files": [
36+ "bin",
37+ "dist",
38+ "README.md",
39+ "package.json"
40+ ],
3541 "license": "MIT",
3642 "dependencies": {
3743 "spago": "^0.93.45"
3844 },
3945 "devDependencies": {
46+ "esbuild": "^0.27.2",
4047 "purs-backend-es": "^1.4.3"
4148 }
4249}
purelint-lspdeleted−2
@@ -1,2 +0,0 @@
1−#!/bin/bash
2−exec node /Users/mark/Developer/purelint/dist/purelint-lsp.js "$@"
purslint-lspnew file+2
@@ -0,0 +1,2 @@
1+#!/bin/bash
2+exec node "$(cd "$(dirname "$0")" && pwd)/dist/purslint-lsp.js" "$@"
spago.lock+94−13
@@ -1,8 +1,8 @@
11{
22 "workspace": {
33 "packages": {
4− "purelint": {
5− "path": "lib/purelint",
4+ "purslint": {
5+ "path": "lib/purslint",
66 "core": {
77 "dependencies": [
88 "arrays",
@@ -69,8 +69,8 @@
6969 "build_plan": []
7070 }
7171 },
72− "purelint-cli": {
73− "path": "bin/purelint-cli",
72+ "purslint-cli": {
73+ "path": "bin/purslint-cli",
7474 "core": {
7575 "dependencies": [
7676 "arrays",
@@ -83,8 +83,9 @@
8383 "node-buffer",
8484 "node-fs",
8585 "node-process",
86+ "optparse",
8687 "prelude",
87− "purelint",
88+ "purslint",
8889 "strings"
8990 ],
9091 "build_plan": [
@@ -104,6 +105,7 @@
104105 "enums",
105106 "exceptions",
106107 "exists",
108+ "exitcodes",
107109 "foldable-traversable",
108110 "foreign",
109111 "foreign-object",
@@ -130,6 +132,8 @@
130132 "now",
131133 "nullable",
132134 "numbers",
135+ "open-memoize",
136+ "optparse",
133137 "ordered-collections",
134138 "orders",
135139 "parallel",
@@ -137,7 +141,7 @@
137141 "posix-types",
138142 "prelude",
139143 "profunctor",
140− "purelint",
144+ "purslint",
141145 "refs",
142146 "safe-coerce",
143147 "st",
@@ -156,8 +160,8 @@
156160 "build_plan": []
157161 }
158162 },
159− "purelint-lsp": {
160− "path": "bin/purelint-lsp",
163+ "purslint-lsp": {
164+ "path": "bin/purslint-lsp",
161165 "core": {
162166 "dependencies": [
163167 "arrays",
@@ -167,7 +171,7 @@
167171 "maybe",
168172 "newtype",
169173 "prelude",
170− "purelint",
174+ "purslint",
171175 "unsafe-coerce"
172176 ],
173177 "build_plan": [
@@ -204,7 +208,7 @@
204208 "partial",
205209 "prelude",
206210 "profunctor",
207− "purelint",
211+ "purslint",
208212 "refs",
209213 "safe-coerce",
210214 "st",
@@ -223,7 +227,7 @@
223227 "build_plan": []
224228 }
225229 },
226− "purelint-tests": {
230+ "purslint-tests": {
227231 "path": "./",
228232 "core": {
229233 "dependencies": [
@@ -233,10 +237,13 @@
233237 "either",
234238 "maybe",
235239 "newtype",
240+ "optparse",
236241 "prelude",
237− "purelint"
242+ "purslint"
238243 ],
239244 "build_plan": [
245+ "aff",
246+ "arraybuffer-types",
240247 "arrays",
241248 "bifunctors",
242249 "catenable-lists",
@@ -244,13 +251,17 @@
244251 "const",
245252 "contravariant",
246253 "control",
254+ "datetime",
247255 "distributive",
248256 "effect",
249257 "either",
250258 "enums",
251259 "exceptions",
252260 "exists",
261+ "exitcodes",
253262 "foldable-traversable",
263+ "foreign",
264+ "foreign-object",
254265 "free",
255266 "functions",
256267 "functors",
@@ -263,14 +274,23 @@
263274 "lists",
264275 "maybe",
265276 "newtype",
277+ "node-buffer",
278+ "node-event-emitter",
279+ "node-process",
280+ "node-streams",
266281 "nonempty",
282+ "nullable",
267283 "numbers",
284+ "open-memoize",
285+ "optparse",
268286 "ordered-collections",
269287 "orders",
288+ "parallel",
270289 "partial",
290+ "posix-types",
271291 "prelude",
272292 "profunctor",
273− "purelint",
293+ "purslint",
274294 "refs",
275295 "safe-coerce",
276296 "st",
@@ -1075,6 +1095,14 @@
10751095 "unsafe-coerce"
10761096 ]
10771097 },
1098+ "exitcodes": {
1099+ "type": "registry",
1100+ "version": "4.0.0",
1101+ "integrity": "sha256-4wxViTbyOoyKJ/WaRGI6+hZmgMKI5Miv16lSwefiLSM=",
1102+ "dependencies": [
1103+ "enums"
1104+ ]
1105+ },
10781106 "foldable-traversable": {
10791107 "type": "registry",
10801108 "version": "6.0.0",
@@ -1458,6 +1486,59 @@
14581486 "maybe"
14591487 ]
14601488 },
1489+ "open-memoize": {
1490+ "type": "registry",
1491+ "version": "6.2.0",
1492+ "integrity": "sha256-p1m7wF3aHQ80yUvqMs20OTMl496WS6YpKlmI2Nkg9j0=",
1493+ "dependencies": [
1494+ "either",
1495+ "integers",
1496+ "lazy",
1497+ "lists",
1498+ "maybe",
1499+ "partial",
1500+ "prelude",
1501+ "strings",
1502+ "tuples"
1503+ ]
1504+ },
1505+ "optparse": {
1506+ "type": "registry",
1507+ "version": "5.0.1",
1508+ "integrity": "sha256-cEzEkNW4q0gZlXl4z0zn+H2vs6l2UAp7NPHCsois73k=",
1509+ "dependencies": [
1510+ "aff",
1511+ "arrays",
1512+ "bifunctors",
1513+ "console",
1514+ "control",
1515+ "effect",
1516+ "either",
1517+ "enums",
1518+ "exists",
1519+ "exitcodes",
1520+ "foldable-traversable",
1521+ "free",
1522+ "gen",
1523+ "integers",
1524+ "lazy",
1525+ "lists",
1526+ "maybe",
1527+ "newtype",
1528+ "node-buffer",
1529+ "node-process",
1530+ "node-streams",
1531+ "nonempty",
1532+ "numbers",
1533+ "open-memoize",
1534+ "partial",
1535+ "prelude",
1536+ "strings",
1537+ "tailrec",
1538+ "transformers",
1539+ "tuples"
1540+ ]
1541+ },
14611542 "ordered-collections": {
14621543 "type": "registry",
14631544 "version": "3.2.0",
spago.yaml+3−2
@@ -4,15 +4,16 @@ workspace:
44 extraPackages: {}
55
66package:
7− name: purelint-tests
7+ name: purslint-tests
88 dependencies:
99 - console
1010 - effect
1111 - either
1212 - maybe
1313 - newtype
14+ - optparse
1415 - prelude
15− - purelint
16+ - purslint
1617 - arrays
1718 test:
1819 main: Test.Main
test/Test/Main.purs+88−88
@@ -10,93 +10,93 @@ import Data.Newtype (unwrap)
1010import Data.Traversable (traverse)
1111import Effect (Effect)
1212import Effect.Class.Console (log)
13−import Purelint.Fix (applyAllFixes)
14−import Purelint.Tidy (formatExpr, formatModule)
15−import Purelint.Rules.MapIdentity (mapIdentityRule)
16−import Purelint.Rules.MapFusion (mapFusionRule)
17−import Purelint.Rules.UseTraverse (useTraverseRule)
18−import Purelint.Rules.ConcatMap (concatMapRule)
19−import Purelint.Rules.NotEqual (notEqualRule)
20−import Purelint.Rules.UseGuard (useGuardRule)
21−import Purelint.Rules.EtaReduce (etaReduceRule)
22−import Purelint.Rules.EtaReduceDecl (etaReduceDeclRule)
23−import Purelint.Rules.RedundantBind (redundantBindRule)
24−import Purelint.Rules.LetToWhere (letToWhereRule)
25−import Purelint.Rules.LetToDo (letToDoRule)
26−import Purelint.Rules.RedundantIf (redundantIfRule)
27−import Purelint.Rules.FunctorLaw (functorLawRule)
28−import Purelint.Rules.UseVoid (useVoidRule)
29−import Purelint.Rules.UseJoin (useJoinRule)
30−import Purelint.Rules.UseAny (useAnyRule)
31−import Purelint.Rules.UseAll (useAllRule)
32−import Purelint.Rules.BooleanSimplify (booleanSimplifyRule)
33−import Purelint.Rules.CollapseLambdas (collapseLambdasRule)
34−import Purelint.Rules.UseConst (useConstRule)
35−import Purelint.Rules.UseDollar (useDollarRule)
36−import Purelint.Rules.UseNull (useNullRule)
37−import Purelint.Rules.UseFromMaybe (useFromMaybeRule)
38−import Purelint.Rules.UseIsJust (useIsJustRule)
39−import Purelint.Rules.UseIsNothing (useIsNothingRule)
40−import Purelint.Rules.UseWhen (useWhenRule)
41−import Purelint.Rules.UseUnless (useUnlessRule)
42−import Purelint.Rules.RedundantFlip (redundantFlipRule)
43−import Purelint.Rules.UseNotElem (useNotElemRule)
44−import Purelint.Rules.UseMinMax (useMinMaxRule)
45−import Purelint.Rules.MonoidIdentity (monoidIdentityRule)
46−import Purelint.Rules.UseFold (useFoldRule)
47−import Purelint.Rules.UseSequence (useSequenceRule)
48−import Purelint.Rules.UseTraverseSequence (useTraverseSequenceRule)
49−import Purelint.Rules.RedundantNot (redundantNotRule)
50−import Purelint.Rules.UseFstSnd (useFstSndRule)
51−import Purelint.Rules.UseMapMaybe (useMapMaybeRule)
52−import Purelint.Rules.UseGuardMaybe (useGuardMaybeRule)
53−import Purelint.Rules.UseMaybeMap (useMaybeMapRule)
54−import Purelint.Rules.UseApplicative (useApplicativeRule)
55−import Purelint.Rules.UseBindFlip (useBindFlipRule)
56−import Purelint.Rules.UseFor (useForRule)
57−import Purelint.Rules.UseUnwrap (useUnwrapRule)
58−import Purelint.Rules.RedundantGuard (redundantGuardRule)
59−import Purelint.Rules.UseComparing (useComparingRule)
60−import Purelint.Rules.UseOn (useOnRule)
61−import Purelint.Rules.UseFindMap (useFindMapRule)
62−import Purelint.Rules.UseLastReverse (useLastReverseRule)
63−import Purelint.Rules.RedundantReverse (redundantReverseRule)
64−import Purelint.Rules.UseBreak (useBreakRule)
65−import Purelint.Rules.UseSpan (useSpanRule)
66−import Purelint.Rules.UseMinimumSort (useMinimumSortRule)
67−import Purelint.Rules.UseBimap (useBimapRule)
68−import Purelint.Rules.UseEitherMap (useEitherMapRule)
69−import Purelint.Rules.EvaluateFst (evaluateFstRule)
70−import Purelint.Rules.EvaluateConst (evaluateConstRule)
71−import Purelint.Rules.UseOr (useOrRule)
72−import Purelint.Rules.UseAnd (useAndRule)
73−import Purelint.Rules.UseFoldMap (useFoldMapRule)
74−import Purelint.Rules.UseFoldMapId (useFoldMapIdRule)
75−import Purelint.Rules.UseApplyFlipped (useApplyFlippedRule)
76−import Purelint.Rules.WhenNot (whenNotRule)
77−import Purelint.Rules.UnlessNot (unlessNotRule)
78−import Purelint.Rules.UseZip (useZipRule)
79−import Purelint.Rules.UseReplicate (useReplicateRule)
80−import Purelint.Rules.UseUncurry (useUncurryRule)
81−import Purelint.Rules.RedundantNegate (redundantNegateRule)
82−import Purelint.Rules.UseFromJust (useFromJustRule)
83−import Purelint.Rules.UseHead (useHeadRule)
84−import Purelint.Rules.RedundantId (redundantIdRule)
85−import Purelint.Rules.NothingBind (nothingBindRule)
86−import Purelint.Rules.UseElemIndex (useElemIndexRule)
87−import Purelint.Rules.MonadLaw (monadLawRule)
88−import Purelint.Rules.EvaluateBool (evaluateBoolRule)
89−import Purelint.Rules.UseFoldBool (useFoldBoolRule)
90−import Purelint.Rules.AlternativeLaw (alternativeLawRule)
91−import Purelint.Rules.EvaluateEither (evaluateEitherRule)
92−import Purelint.Rules.UseCaseOf (useCaseOfRule)
93−import Purelint.Rules.FlattenCase (flattenCaseRule)
94−import Purelint.Rules.UsePatternGuards (usePatternGuardsRule)
95−import Purelint.Rules.RedundantParens (redundantParensRule)
96−import Purelint.Rule (Rule)
97−import Purelint.Runner (runRules, getImportsFromSource, getModuleNames)
98−import Purelint.Imports (hasValue, isPreludeModule)
99−import Purelint.Types (LintResult(..), LintWarning(..), RuleId(..), SourceCode(..), Suggestion(..))
13+import Purslint.Fix (applyAllFixes)
14+import Purslint.Tidy (formatExpr, formatModule)
15+import Purslint.Rules.MapIdentity (mapIdentityRule)
16+import Purslint.Rules.MapFusion (mapFusionRule)
17+import Purslint.Rules.UseTraverse (useTraverseRule)
18+import Purslint.Rules.ConcatMap (concatMapRule)
19+import Purslint.Rules.NotEqual (notEqualRule)
20+import Purslint.Rules.UseGuard (useGuardRule)
21+import Purslint.Rules.EtaReduce (etaReduceRule)
22+import Purslint.Rules.EtaReduceDecl (etaReduceDeclRule)
23+import Purslint.Rules.RedundantBind (redundantBindRule)
24+import Purslint.Rules.LetToWhere (letToWhereRule)
25+import Purslint.Rules.LetToDo (letToDoRule)
26+import Purslint.Rules.RedundantIf (redundantIfRule)
27+import Purslint.Rules.FunctorLaw (functorLawRule)
28+import Purslint.Rules.UseVoid (useVoidRule)
29+import Purslint.Rules.UseJoin (useJoinRule)
30+import Purslint.Rules.UseAny (useAnyRule)
31+import Purslint.Rules.UseAll (useAllRule)
32+import Purslint.Rules.BooleanSimplify (booleanSimplifyRule)
33+import Purslint.Rules.CollapseLambdas (collapseLambdasRule)
34+import Purslint.Rules.UseConst (useConstRule)
35+import Purslint.Rules.UseDollar (useDollarRule)
36+import Purslint.Rules.UseNull (useNullRule)
37+import Purslint.Rules.UseFromMaybe (useFromMaybeRule)
38+import Purslint.Rules.UseIsJust (useIsJustRule)
39+import Purslint.Rules.UseIsNothing (useIsNothingRule)
40+import Purslint.Rules.UseWhen (useWhenRule)
41+import Purslint.Rules.UseUnless (useUnlessRule)
42+import Purslint.Rules.RedundantFlip (redundantFlipRule)
43+import Purslint.Rules.UseNotElem (useNotElemRule)
44+import Purslint.Rules.UseMinMax (useMinMaxRule)
45+import Purslint.Rules.MonoidIdentity (monoidIdentityRule)
46+import Purslint.Rules.UseFold (useFoldRule)
47+import Purslint.Rules.UseSequence (useSequenceRule)
48+import Purslint.Rules.UseTraverseSequence (useTraverseSequenceRule)
49+import Purslint.Rules.RedundantNot (redundantNotRule)
50+import Purslint.Rules.UseFstSnd (useFstSndRule)
51+import Purslint.Rules.UseMapMaybe (useMapMaybeRule)
52+import Purslint.Rules.UseGuardMaybe (useGuardMaybeRule)
53+import Purslint.Rules.UseMaybeMap (useMaybeMapRule)
54+import Purslint.Rules.UseApplicative (useApplicativeRule)
55+import Purslint.Rules.UseBindFlip (useBindFlipRule)
56+import Purslint.Rules.UseFor (useForRule)
57+import Purslint.Rules.UseUnwrap (useUnwrapRule)
58+import Purslint.Rules.RedundantGuard (redundantGuardRule)
59+import Purslint.Rules.UseComparing (useComparingRule)
60+import Purslint.Rules.UseOn (useOnRule)
61+import Purslint.Rules.UseFindMap (useFindMapRule)
62+import Purslint.Rules.UseLastReverse (useLastReverseRule)
63+import Purslint.Rules.RedundantReverse (redundantReverseRule)
64+import Purslint.Rules.UseBreak (useBreakRule)
65+import Purslint.Rules.UseSpan (useSpanRule)
66+import Purslint.Rules.UseMinimumSort (useMinimumSortRule)
67+import Purslint.Rules.UseBimap (useBimapRule)
68+import Purslint.Rules.UseEitherMap (useEitherMapRule)
69+import Purslint.Rules.EvaluateFst (evaluateFstRule)
70+import Purslint.Rules.EvaluateConst (evaluateConstRule)
71+import Purslint.Rules.UseOr (useOrRule)
72+import Purslint.Rules.UseAnd (useAndRule)
73+import Purslint.Rules.UseFoldMap (useFoldMapRule)
74+import Purslint.Rules.UseFoldMapId (useFoldMapIdRule)
75+import Purslint.Rules.UseApplyFlipped (useApplyFlippedRule)
76+import Purslint.Rules.WhenNot (whenNotRule)
77+import Purslint.Rules.UnlessNot (unlessNotRule)
78+import Purslint.Rules.UseZip (useZipRule)
79+import Purslint.Rules.UseReplicate (useReplicateRule)
80+import Purslint.Rules.UseUncurry (useUncurryRule)
81+import Purslint.Rules.RedundantNegate (redundantNegateRule)
82+import Purslint.Rules.UseFromJust (useFromJustRule)
83+import Purslint.Rules.UseHead (useHeadRule)
84+import Purslint.Rules.RedundantId (redundantIdRule)
85+import Purslint.Rules.NothingBind (nothingBindRule)
86+import Purslint.Rules.UseElemIndex (useElemIndexRule)
87+import Purslint.Rules.MonadLaw (monadLawRule)
88+import Purslint.Rules.EvaluateBool (evaluateBoolRule)
89+import Purslint.Rules.UseFoldBool (useFoldBoolRule)
90+import Purslint.Rules.AlternativeLaw (alternativeLawRule)
91+import Purslint.Rules.EvaluateEither (evaluateEitherRule)
92+import Purslint.Rules.UseCaseOf (useCaseOfRule)
93+import Purslint.Rules.FlattenCase (flattenCaseRule)
94+import Purslint.Rules.UsePatternGuards (usePatternGuardsRule)
95+import Purslint.Rules.RedundantParens (redundantParensRule)
96+import Purslint.Rule (Rule)
97+import Purslint.Runner (runRules, getImportsFromSource, getModuleNames)
98+import Purslint.Imports (hasValue, isPreludeModule)
99+import Purslint.Types (LintResult(..), LintWarning(..), RuleId(..), SourceCode(..), Suggestion(..))
100100
101101-- | Simple test framework
102102type TestResult = { passed :: Boolean, name :: String, message :: String }
@@ -175,7 +175,7 @@ assertFixFormatted name rules source expectedFixed =
175175-- | Run all tests and report results
176176main :: Effect Unit
177177main = do
178− log "Running purelint tests...\n"
178+ log "Running purslint tests...\n"
179179
180180 let results = mapIdentityTests
181181 <> mapFusionTests
vscode-extension/out/extension.js+4−4
@@ -39,15 +39,15 @@ const vscode = __importStar(require("vscode"));
3939const node_1 = require("vscode-languageclient/node");
4040let client;
4141function activate(context) {
42− const config = vscode.workspace.getConfiguration('purelint');
42+ const config = vscode.workspace.getConfiguration('purslint');
4343 if (!config.get('enable', true)) {
4444 return;
4545 }
4646 // Get server path from config or use default
4747 let serverPath = config.get('serverPath', '');
4848 if (!serverPath) {
49− // Default to the purelint project location
50− serverPath = '/Users/mark/Developer/purelint/dist/purelint-lsp.js';
49+ // Default to the purslint project location
50+ serverPath = '/Users/mark/Developer/purslint/dist/purslint-lsp.js';
5151 }
5252 const serverOptions = {
5353 run: {
@@ -65,7 +65,7 @@ function activate(context) {
6565 fileEvents: vscode.workspace.createFileSystemWatcher('**/*.purs')
6666 }
6767 };
68− client = new node_1.LanguageClient('purelint', 'Purelint', serverOptions, clientOptions);
68+ client = new node_1.LanguageClient('purslint', 'Purslint', serverOptions, clientOptions);
6969 client.start();
7070}
7171function deactivate() {
vscode-extension/out/test/suite/extension.test.js+4−4
@@ -36,13 +36,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3636const assert = __importStar(require("assert"));
3737const vscode = __importStar(require("vscode"));
3838const path = __importStar(require("path"));
39−suite('Purelint Extension Test Suite', () => {
39+suite('Purslint Extension Test Suite', () => {
4040 vscode.window.showInformationMessage('Start all tests.');
4141 test('Extension should be present', () => {
42− assert.ok(vscode.extensions.getExtension('purelint.purelint'));
42+ assert.ok(vscode.extensions.getExtension('RowtypeYoga.purslint'));
4343 });
4444 test('Extension should activate on PureScript file', async () => {
45− const ext = vscode.extensions.getExtension('purelint.purelint');
45+ const ext = vscode.extensions.getExtension('RowtypeYoga.purslint');
4646 assert.ok(ext);
4747 // Open a PureScript file to trigger activation
4848 const testFile = path.join(__dirname, '../../../test-workspace/Test.purs');
@@ -54,7 +54,7 @@ suite('Purelint Extension Test Suite', () => {
5454 assert.ok(ext.isActive);
5555 });
5656 test('Should provide code actions', async () => {
57− const ext = vscode.extensions.getExtension('purelint.purelint');
57+ const ext = vscode.extensions.getExtension('RowtypeYoga.purslint');
5858 if (!ext?.isActive) {
5959 await ext?.activate();
6060 }
vscode-extension/out/test/suite/extension.test.js.map+1−1
@@ -1 +1 @@
1−{"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../../src/test/suite/extension.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,+CAAiC;AACjC,2CAA6B;AAE7B,KAAK,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAEzD,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAEf,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE1C,iCAAiC;QACjC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;YACnB,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE1C,6CAA6C;QAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,CACtD,kCAAkC,EAClC,GAAG,CAAC,GAAG,EACP,KAAK,CACN,CAAC;QAEF,qEAAqE;QACrE,wCAAwC;QACxC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,SAAS,EAAE,kCAAkC,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1+{"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../../src/test/suite/extension.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,+CAAiC;AACjC,2CAA6B;AAE7B,KAAK,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAEzD,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;QACnE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAEf,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE1C,iCAAiC;QACjC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;YACnB,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE1C,6CAA6C;QAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,CACtD,kCAAkC,EAClC,GAAG,CAAC,GAAG,EACP,KAAK,CACN,CAAC;QAEF,qEAAqE;QACrE,wCAAwC;QACxC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,SAAS,EAAE,kCAAkC,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
vscode-extension/package.json+10−9
@@ -1,9 +1,10 @@
11{
2− "name": "purelint",
3− "displayName": "Purelint",
2+ "name": "purslint",
3+ "displayName": "Purslint",
44 "description": "PureScript linter inspired by hlint",
5− "version": "0.1.0",
6− "publisher": "purelint",
5+ "version": "0.1.1",
6+ "publisher": "RowtypeYoga",
7+ "icon": "purslint.png",
78 "engines": {
89 "vscode": "^1.85.0"
910 },
@@ -18,17 +19,17 @@
1819 "contributes": {
1920 "configuration": {
2021 "type": "object",
21− "title": "Purelint",
22+ "title": "Purslint",
2223 "properties": {
23− "purelint.enable": {
24+ "purslint.enable": {
2425 "type": "boolean",
2526 "default": true,
26− "description": "Enable/disable purelint"
27+ "description": "Enable/disable purslint"
2728 },
28− "purelint.serverPath": {
29+ "purslint.serverPath": {
2930 "type": "string",
3031 "default": "",
31− "description": "Path to purelint-lsp executable (uses bundled version if empty)"
32+ "description": "Path to purslint-lsp executable (uses bundled version if empty)"
3233 }
3334 }
3435 }
vscode-extension/purelint-0.1.0.vsix → vscode-extension/purslint-0.1.1.vsixrenamed

Binary file not shown.

vscode-extension/purslint.pngnew file

Binary file not shown.

vscode-extension/src/extension.ts+5−5
@@ -10,7 +10,7 @@ import {
1010let client: LanguageClient | undefined;
1111
1212export function activate(context: vscode.ExtensionContext) {
13− const config = vscode.workspace.getConfiguration('purelint');
13+ const config = vscode.workspace.getConfiguration('purslint');
1414
1515 if (!config.get<boolean>('enable', true)) {
1616 return;
@@ -19,8 +19,8 @@ export function activate(context: vscode.ExtensionContext) {
1919 // Get server path from config or use default
2020 let serverPath = config.get<string>('serverPath', '');
2121 if (!serverPath) {
22− // Default to the purelint project location
23− serverPath = '/Users/mark/Developer/purelint/dist/purelint-lsp.js';
22+ // Default to the purslint project location
23+ serverPath = '/Users/mark/Developer/purslint/dist/purslint-lsp.js';
2424 }
2525
2626 const serverOptions: ServerOptions = {
@@ -42,8 +42,8 @@ export function activate(context: vscode.ExtensionContext) {
4242 };
4343
4444 client = new LanguageClient(
45− 'purelint',
46− 'Purelint',
45+ 'purslint',
46+ 'Purslint',
4747 serverOptions,
4848 clientOptions
4949 );
vscode-extension/src/test/suite/extension.test.ts+4−4
@@ -2,15 +2,15 @@ import * as assert from 'assert';
22import * as vscode from 'vscode';
33import * as path from 'path';
44
5−suite('Purelint Extension Test Suite', () => {
5+suite('Purslint Extension Test Suite', () => {
66 vscode.window.showInformationMessage('Start all tests.');
77
88 test('Extension should be present', () => {
9− assert.ok(vscode.extensions.getExtension('purelint.purelint'));
9+ assert.ok(vscode.extensions.getExtension('RowtypeYoga.purslint'));
1010 });
1111
1212 test('Extension should activate on PureScript file', async () => {
13− const ext = vscode.extensions.getExtension('purelint.purelint');
13+ const ext = vscode.extensions.getExtension('RowtypeYoga.purslint');
1414 assert.ok(ext);
1515
1616 // Open a PureScript file to trigger activation
@@ -25,7 +25,7 @@ suite('Purelint Extension Test Suite', () => {
2525 });
2626
2727 test('Should provide code actions', async () => {
28− const ext = vscode.extensions.getExtension('purelint.purelint');
28+ const ext = vscode.extensions.getExtension('RowtypeYoga.purslint');
2929 if (!ext?.isActive) {
3030 await ext?.activate();
3131 }
zed-extension/Cargo.lock+3−3
@@ -412,7 +412,7 @@ dependencies = [
412412]
413413
414414[[package]]
415−name = "purelint-zed"
415+name = "purslint-zed"
416416version = "0.0.1"
417417dependencies = [
418418 "zed_extension_api",
@@ -818,6 +818,6 @@ dependencies = [
818818
819819[[package]]
820820name = "zmij"
821−version = "1.0.16"
821+version = "1.0.17"
822822source = "registry+https://github.com/rust-lang/crates.io-index"
823−checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65"
823+checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439"
zed-extension/Cargo.toml+1−1
@@ -1,5 +1,5 @@
11[package]
2−name = "purelint-zed"
2+name = "purslint-zed"
33version = "0.0.1"
44edition = "2021"
55
zed-extension/extension.toml+3−3
@@ -1,5 +1,5 @@
1−id = "purelint"
2−name = "Purelint"
1+id = "purslint"
2+name = "Purslint"
33version = "0.0.1"
44schema_version = 1
55authors = ["Mark"]
@@ -9,5 +9,5 @@ description = "PureScript linter inspired by hlint"
99kind = "Rust"
1010version = "0.7.0"
1111
12−[language_servers.purelint]
12+[language_servers.purslint]
1313language = "PureScript"
zed-extension/src/lib.rs+5−5
@@ -1,10 +1,10 @@
11use zed_extension_api::{self as zed, Result};
22
3−struct PurelintExtension;
3+struct PurslintExtension;
44
5−impl zed::Extension for PurelintExtension {
5+impl zed::Extension for PurslintExtension {
66 fn new() -> Self {
7− PurelintExtension
7+ PurslintExtension
88 }
99
1010 fn language_server_command(
@@ -13,11 +13,11 @@ impl zed::Extension for PurelintExtension {
1313 _worktree: &zed::Worktree,
1414 ) -> Result<zed::Command> {
1515 Ok(zed::Command {
16− command: "/Users/mark/Developer/purelint/purelint-lsp".to_string(),
16+ command: "purslint-lsp".to_string(),
1717 args: vec![],
1818 env: Default::default(),
1919 })
2020 }
2121}
2222
23−zed::register_extension!(PurelintExtension);
23+zed::register_extension!(PurslintExtension);