diff --git a/.stylish-haskell.yaml b/.stylish-haskell.yaml new file mode 100644 index 0000000..73b4d95 --- /dev/null +++ b/.stylish-haskell.yaml @@ -0,0 +1,101 @@ +# Stylish-haskell configuration file. + +# Principles: +# +# 1. Amount of indent should not be dependent on the length of the previous line +# 2. Imports lists should be compact +# 3. All linting rules that delete comments should be disabled +# 4. No inline indenting, for example indent of ->, =, <-, as +# 5. Redunant imports and pragmas should be removed +# 6. Consistent syntax +# 7. No trailing whitespaces +# 8. Slightly generous screen with assumed +# 9. All Haskell files in the project are subject to code formatting style + +steps: + # Principle 4 + - simple_align: + cases: false + top_level_patterns: false + # Principle 3 + records: false + + # Import cleanup + - imports: + align: global + + # Principle 1,2 + list_align: with_module_name + + # Principle 4 + pad_module_names: false + + # Principle 2 + long_list_align: inline + + empty_list_align: inherit + + list_padding: 2 + + separate_lists: true + + space_surround: false + + - language_pragmas: + style: vertical + + align: false + + # Principle 5 + remove_redundant: true + + # Principle 6 + language_prefix: LANGUAGE + + # Principle 7 + - trailing_whitespace: {} + +# Principle 8 +columns: 100 + +newline: native + +# Principle 9 +# +# These syntax-affecting language extensions are enabled so that +# stylish-haskell wouldn't fail with parsing errors when processing files +# in projects that have those extensions enabled in the .cabal file +# rather than locally. +# +# In particular language extensions with British and American spellings +# that we use should be included here until stylish-haskell supports +# the British spelling. +language_extensions: + - BangPatterns + - ConstraintKinds + - DataKinds + - DefaultSignatures + - DeriveDataTypeable + - DeriveGeneric + - ExistentialQuantification + - FlexibleContexts + - FlexibleInstances + - FunctionalDependencies + - GADTs + - GeneralizedNewtypeDeriving + - LambdaCase + - MultiParamTypeClasses + - MultiWayIf + - OverloadedStrings + - PolyKinds + - RecordWildCards + - ScopedTypeVariables + - StandaloneDeriving + - TemplateHaskell + - TupleSections + - TypeApplications + - TypeFamilies + - ViewPatterns + - ExplicitNamespaces + +cabal: true diff --git a/outputs.nix b/outputs.nix index 0714f51..a38fb63 100644 --- a/outputs.nix +++ b/outputs.nix @@ -23,6 +23,8 @@ type = "app"; program = "${flake.packages."skeleton-web:exe:site"}/bin/site"; }; - devShell = pkgs.callPackage ./shell.nix {}; + devShell = pkgs.callPackage ./shell.nix { + inherit (haskellNix.legacyPackages."${pkgs.system}") stylish-haskell; + }; } ) diff --git a/shell.nix b/shell.nix index 1ca9028..5611752 100644 --- a/shell.nix +++ b/shell.nix @@ -1,11 +1,13 @@ { pkgs ? import {}, mkShell, + stylish-haskell, }: with pkgs; mkShell { buildInputs = [ nix # Powerful package manager, makes packaging reliable & reproducible + stylish-haskell # A simple Haskell code prettifier tea # Gitea official CLI client treefmt # one CLI to format the code tree ]; diff --git a/treefmt.toml b/treefmt.toml index fe5d1f3..189c48b 100644 --- a/treefmt.toml +++ b/treefmt.toml @@ -1,3 +1,9 @@ +[formatter.haskell] +command = "stylish-haskell" +options = [ "--inplace" ] +includes = ["*.hs"] + [formatter.nix] command = "alejandra" includes = ["*.nix"] +