Skip to content

Commit

Permalink
Merge pull request #79 from clash-lang/formatter
Browse files Browse the repository at this point in the history
Add fourmolu as a formatter
  • Loading branch information
rowanG077 authored Jun 17, 2024
2 parents 0f387ab + 5968f44 commit 5e8ad7a
Show file tree
Hide file tree
Showing 53 changed files with 5,448 additions and 4,263 deletions.
1 change: 1 addition & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
8eb89807b15f622e70b25f0eb18f8de6404dac23
22 changes: 14 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Setup Stack / GHC
uses: haskell-actions/setup@v2
with:
ghc-version: '8.10.7'
ghc-version: '9.4.8'
cabal-version: '3.10.2.1'
enable-stack: true
stack-version: 'latest'
Expand Down Expand Up @@ -54,21 +54,14 @@ jobs:
matrix:
os: [ubuntu-latest]
clash:
- "1.6.1"
- "1.8.1"
cabal:
- "3.10"
ghc:
- "8.10.7"
- "9.0.2"
- "9.2.8"
- "9.4.8"
- "9.6.4"
exclude:
# Clash 1.6 doesn't support latest GHCs
- {clash: "1.6.1", ghc: "9.2.8"}
- {clash: "1.6.1", ghc: "9.4.8"}
- {clash: "1.6.1", ghc: "9.6.4"}

env:
clash_version: ${{ matrix.clash }}
Expand Down Expand Up @@ -115,6 +108,19 @@ jobs:
run: |
.ci/build_docs.sh
fourmolu:
runs-on: ubuntu-latest
steps:
# Note that you must checkout your code before running haskell-actions/run-fourmolu
- uses: actions/checkout@v3
- uses: haskell-actions/run-fourmolu@v9
with:
version: "0.14.0.0"
pattern: |
src/**/*.hs
tests/**/*.hs
!src/Protocols/Cpp.hs
linting:
name: Source code linting
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion Setup.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Prelude
import Distribution.Extra.Doctest (defaultMainWithDoctests)
import Prelude

main :: IO ()
main = defaultMainWithDoctests "doctests"
7 changes: 3 additions & 4 deletions clash-protocols.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,11 @@ common common-options

default-language: Haskell2010
build-depends:
-- GHC >= 8.10
base >= 4.14.0.0,
-- GHC >= 9.0
base >= 4.15.0.0,
Cabal,

-- clash-prelude will set suitable version bounds for the plugins
clash-prelude >= 1.4.0 && < 1.10,
clash-prelude >= 1.8.1 && < 1.10,
ghc-typelits-natnormalise,
ghc-typelits-extra,
ghc-typelits-knownnat
Expand Down
6 changes: 6 additions & 0 deletions default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{ nixpkgs ? import ./nix/nixpkgs.nix {} }:

with nixpkgs.pkgs;
with gitignore;

haskellPackages.callCabal2nix "clash-protocols" (gitignoreSource ./.) {}
55 changes: 55 additions & 0 deletions format.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/bin/env bash
set -euo pipefail

# Help message
show_help() {
local script_name
script_name=$(basename "$0")
echo "Fourmolu formatting Script.
Usage:
$script_name diff Format the current git diff.
$script_name full Format all source files.
$script_name check Check the formatting of the source files.
$script_name (-h | --help)
Options:
-h --help Show this screen."
}

# Main script logic
if [[ "$#" -eq 0 || "$1" == "-h" || "$1" == "--help" ]]; then
show_help
exit 0
fi

exclude_files=(
"src/Protocols/Cpp.hs"
)

# Make sure it doesn't matter from where this script is executed
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $DIR

if [ $1 == "diff" ] ; then
src_files=$(git diff --cached --name-only --diff-filter=ACMR -- '*.hs')
else
src_files=$(find Setup.hs src tests -type f -name "*.hs")
fi

src_files_str=$(printf "%s\n" "${src_files[@]}" | sed 's| |\\ |g')
exclude_files_str=$(printf "%s\n" "${exclude_files[@]}" | sed 's| |\\ |g')
src_files=$(echo "$src_files_str" | grep -vwE "$exclude_files_str")

if [ -z "$src_files" ]; then
exit 0;
fi

if [[ "$1" == "diff" || "$1" == "full" ]] ; then
fourmolu --mode inplace $src_files
elif [[ "$1" == "check" ]] ; then
fourmolu --mode check $src_files
else
echo "Expected a single argument, \"full\", \"diff\", \"check\" or \"--help\"" >&2
exit 3
fi
2 changes: 2 additions & 0 deletions fourmolu.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
indentation: 2
column-limit: 90
34 changes: 34 additions & 0 deletions nix/nixpkgs.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{ sources ? import ./sources.nix }:

let
overlay = _: pkgs: {

# Nix tooling
niv = (import sources.niv {}).niv;
gitignore = import sources.gitignore { inherit (pkgs) lib; };

# Haskell overrides
haskellPackages = pkgs.haskellPackages.override {
overrides = self: super: {
# Add overrides here
circuit-notation =
self.callCabal2nix "circuit-notation" sources.circuit-notation {};
doctest-parallel =
self.callCabal2nix "doctest-parallel" sources.doctest-parallel {};
clash-prelude =
pkgs.haskell.lib.dontCheck (self.callCabal2nix "clash-prelude" (sources.clash-compiler + "/clash-prelude") {});
clash-lib =
self.callCabal2nix "clash-lib" (sources.clash-compiler + "/clash-lib") {};
clash-ghc =
self.callCabal2nix "clash-ghc" (sources.clash-compiler + "/clash-ghc") {};
clash-prelude-hedgehog =
self.callCabal2nix "clash-prelude" (sources.clash-compiler + "/clash-prelude-hedgehog") {};
tasty-hedgehog =
self.callCabal2nix "tasty-hedgehog" sources.tasty-hedgehog {};
hedgehog =
self.callCabal2nix "hedgehog" (sources.haskell-hedgehog + "/hedgehog") {};
};
};
};

in import sources.nixpkgs { overlays = [ overlay ]; }
102 changes: 102 additions & 0 deletions nix/sources.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
{
"clash-compiler": {
"branch": "1.8",
"description": "Haskell to VHDL/Verilog/SystemVerilog compiler",
"homepage": "https://clash-lang.org/",
"owner": "clash-lang",
"repo": "clash-compiler",
"rev": "3f5dc67c0e526e43a4dd88eb3902e39ed512c166",
"sha256": "022rwif8xkaabw0j3arhyj0hswmh3vq2nx1bbz8rbkp05jm4psgg",
"type": "tarball",
"url": "https://github.com/clash-lang/clash-compiler/archive/3f5dc67c0e526e43a4dd88eb3902e39ed512c166.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz",
"version": "1.8.1"
},
"doctest-parallel": {
"branch": "main",
"description": "Test interactive Haskell examples",
"homepage": null,
"owner": "martijnbastiaan",
"repo": "doctest-parallel",
"rev": "d73df0a2fd58b0b6aba438eb40aa56d30724e42a",
"sha256": "1k88bkwz2crvb6dafcf6y5y6wm0m2qvds57f3b0rx4id7la4qv89",
"type": "tarball",
"url": "https://github.com/martijnbastiaan/doctest-parallel/archive/d73df0a2fd58b0b6aba438eb40aa56d30724e42a.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz",
"version": "0.3.1"
},
"gitignore": {
"branch": "master",
"description": "Nix function for filtering local git sources",
"homepage": "",
"owner": "hercules-ci",
"repo": "gitignore",
"rev": "bff2832ec341cf30acb3a4d3e2e7f1f7b590116a",
"sha256": "0va0janxvmilm67nbl81gdbpppal4aprxzb25gp9pqvf76ahxsci",
"type": "tarball",
"url": "https://github.com/hercules-ci/gitignore/archive/bff2832ec341cf30acb3a4d3e2e7f1f7b590116a.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"haskell-hedgehog": {
"branch": "master",
"description": "Release with confidence, state-of-the-art property testing for Haskell.",
"homepage": "",
"owner": "hedgehogqa",
"repo": "haskell-hedgehog",
"rev": "52c35cabe24de2a1c03e72dde9d04b64f81d1f44",
"sha256": "1f9znljkmrdd4nlfmjfi8kx0fgcysp328rz27099n7bygchpgjr6",
"type": "tarball",
"url": "https://github.com/hedgehogqa/haskell-hedgehog/archive/52c35cabe24de2a1c03e72dde9d04b64f81d1f44.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz",
"version": "1.4"
},
"circuit-notation": {
"branch": "master",
"description": "A plugin for circuit notation",
"homepage": null,
"owner": "cchalmers",
"repo": "circuit-notation",
"rev": "19b386c4aa3ff690758ae089c7754303f3500cc9",
"sha256": "0qz2w6akxj51kq50rbl88bnjyxzd2798a9sn9jj1z2kak7a6kqbg",
"type": "tarball",
"url": "https://github.com/cchalmers/circuit-notation/archive/19b386c4aa3ff690758ae089c7754303f3500cc9.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"niv": {
"branch": "master",
"description": "Easy dependency management for Nix projects",
"homepage": "https://github.com/nmattia/niv",
"owner": "nmattia",
"repo": "niv",
"rev": "723f0eeb969a730db3c30f977c2b66b9dce9fe4a",
"sha256": "0016l7230gd2kdh0g2w573r9a2krqb7x4ifcjhhsn4h1bwap7qr0",
"type": "tarball",
"url": "https://github.com/nmattia/niv/archive/723f0eeb969a730db3c30f977c2b66b9dce9fe4a.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"nixpkgs": {
"branch": "nixpkgs-unstable",
"description": "Nix Packages collection",
"homepage": "",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e2dd4e18cc1c7314e24154331bae07df76eb582f",
"sha256": "19zbxf7rb787jvyrfhl4z9sn3aisd6xvx6ikybbi75ym9sy39jds",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/e2dd4e18cc1c7314e24154331bae07df76eb582f.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"tasty-hedgehog": {
"branch": "master",
"description": "Tasty integration for the Hedgehog property testing library",
"homepage": "",
"owner": "qfpl",
"repo": "tasty-hedgehog",
"rev": "ed07ecef3f6a01572b577b450ba6d58108173125",
"sha256": "1b8y5ibg1ihgf44nyym4g45lwmabymfcjb2nigv93s2fmng9zp6r",
"type": "tarball",
"url": "https://github.com/qfpl/tasty-hedgehog/archive/ed07ecef3f6a01572b577b450ba6d58108173125.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz",
"version": "1.4.0.2"
}
}
Loading

0 comments on commit 5e8ad7a

Please sign in to comment.