diff --git a/internal/format/config_test.go b/internal/format/config_test.go index 56c0b43..81115b6 100644 --- a/internal/format/config_test.go +++ b/internal/format/config_test.go @@ -55,7 +55,7 @@ func TestConfig(t *testing.T) { // nix nix, ok := cfg.Formatters["nix"] as.True(ok, "nix formatter not found") - as.Equal("nixpkgs-fmt", nix.Command) + as.Equal("alejandra", nix.Command) as.Nil(nix.Options) as.Equal([]string{"*.nix"}, nix.Includes) as.Equal([]string{"examples/nix/sources.nix"}, nix.Excludes) @@ -72,7 +72,7 @@ func TestConfig(t *testing.T) { prettier, ok := cfg.Formatters["prettier"] as.True(ok, "prettier formatter not found") as.Equal("prettier", prettier.Command) - as.Equal([]string{"--write"}, prettier.Options) + as.Equal([]string{"--write", "--tab-width", "4"}, prettier.Options) as.Equal([]string{ "*.css", "*.html", @@ -88,12 +88,12 @@ func TestConfig(t *testing.T) { as.Equal([]string{"CHANGELOG.md"}, prettier.Excludes) // rust - // rust, ok := cfg.Formatters["rust"] - // as.True(ok, "rust formatter not found") - // as.Equal("rustfmt", rust.Command) - // as.Equal([]string{"--edition", "2018"}, rust.Options) - // as.Equal([]string{"*.rs"}, rust.Includes) - // as.Nil(rust.Excludes) + rust, ok := cfg.Formatters["rust"] + as.True(ok, "rust formatter not found") + as.Equal("rustfmt", rust.Command) + as.Equal([]string{"--edition", "2018"}, rust.Options) + as.Equal([]string{"*.rs"}, rust.Includes) + as.Nil(rust.Excludes) // shell shell, ok := cfg.Formatters["shell"] diff --git a/nix/devshell.nix b/nix/devshell.nix index 391bd14..77fdcf9 100644 --- a/nix/devshell.nix +++ b/nix/devshell.nix @@ -28,12 +28,11 @@ golangci-lint # formatters for testing - + alejandra elmPackages.elm-format haskellPackages.cabal-fmt haskellPackages.ormolu mdsh - nixpkgs-fmt nodePackages.prettier python3.pkgs.black rufo diff --git a/nix/treefmt.nix b/nix/treefmt.nix index ed6fc52..3d5aac6 100644 --- a/nix/treefmt.nix +++ b/nix/treefmt.nix @@ -15,7 +15,21 @@ statix.enable = true; }; - settings.formatter.prettier.options = ["--tab-width" "4"]; + settings.formatter.prettier = { + options = ["--tab-width" "4"]; + includes = [ + "*.css" + "*.html" + "*.js" + "*.json" + "*.jsx" + "*.md" + "*.mdx" + "*.scss" + "*.ts" + "*.yaml" + ]; + }; }; devshells.default = { diff --git a/test/examples/elm/elm.json b/test/examples/elm/elm.json index 2e54076..40afd3a 100644 --- a/test/examples/elm/elm.json +++ b/test/examples/elm/elm.json @@ -1,22 +1,22 @@ { - "type": "application", - "source-directories": ["src"], - "elm-version": "0.19.1", - "dependencies": { - "direct": { - "elm/browser": "1.0.2", - "elm/core": "1.0.5", - "elm/html": "1.0.0" + "type": "application", + "source-directories": ["src"], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/browser": "1.0.2", + "elm/core": "1.0.5", + "elm/html": "1.0.0" + }, + "indirect": { + "elm/json": "1.1.3", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.2" + } }, - "indirect": { - "elm/json": "1.1.3", - "elm/time": "1.0.0", - "elm/url": "1.0.0", - "elm/virtual-dom": "1.0.2" + "test-dependencies": { + "direct": {}, + "indirect": {} } - }, - "test-dependencies": { - "direct": {}, - "indirect": {} - } } diff --git a/test/examples/html/index.html b/test/examples/html/index.html index 201633d..00993e1 100644 --- a/test/examples/html/index.html +++ b/test/examples/html/index.html @@ -1,10 +1,10 @@ - - - Title - - -

Hi!

- + + + Title + + +

Hi!

+ diff --git a/test/examples/javascript/source/hello.js b/test/examples/javascript/source/hello.js index 4d352ce..574d4d4 100644 --- a/test/examples/javascript/source/hello.js +++ b/test/examples/javascript/source/hello.js @@ -1,65 +1,68 @@ const helloFactory = function ({ React }) { - const { string, func } = React.PropTypes; + const { string, func } = React.PropTypes; - return function Hello(props) { - // React wants propTypes & defaultProps - // to be static. - Hello.propTypes = { - word: string, - mode: string, + return function Hello(props) { + // React wants propTypes & defaultProps + // to be static. + Hello.propTypes = { + word: string, + mode: string, - actions: React.PropTypes.shape({ - setWord: func.isRequired, - setMode: func.isRequired, - }), - }; - - return { - props, // set props - - componentDidUpdate() { - this.refs.wordInput.getDOMNode().focus(); - }, - - render() { - const { word, mode } = this.props; - - const { setMode, setWord } = this.props.actions; - - const styles = { - displayMode: { - display: mode === "display" ? "inline" : "none", - }, - - editMode: { - display: mode === "edit" ? "inline" : "none", - }, + actions: React.PropTypes.shape({ + setWord: func.isRequired, + setMode: func.isRequired, + }), }; - const onKeyUp = function (e) { - if (e.key !== "Enter") return; + return { + props, // set props - setWord(e.target.value); - setMode("display"); + componentDidUpdate() { + this.refs.wordInput.getDOMNode().focus(); + }, + + render() { + const { word, mode } = this.props; + + const { setMode, setWord } = this.props.actions; + + const styles = { + displayMode: { + display: mode === "display" ? "inline" : "none", + }, + + editMode: { + display: mode === "edit" ? "inline" : "none", + }, + }; + + const onKeyUp = function (e) { + if (e.key !== "Enter") return; + + setWord(e.target.value); + setMode("display"); + }; + + return ( +

+ Hello,  + setMode("edit")} + > + {word}! + + +

+ ); + }, }; - - return ( -

- Hello,  - setMode("edit")}> - {word}! - - -

- ); - }, }; - }; }; export default helloFactory; diff --git a/test/examples/nix/sources.nix b/test/examples/nix/sources.nix index dccca92..0ad4652 100644 --- a/test/examples/nix/sources.nix +++ b/test/examples/nix/sources.nix @@ -3,52 +3,49 @@ let # # The fetchers. fetch_ fetches specs of type . # - fetch_file = pkgs: name: spec: - let - name' = sanitizeName name + "-src"; - in + fetch_file = pkgs: name: spec: let + name' = sanitizeName name + "-src"; + in if spec.builtin or true then builtins_fetchurl - { - inherit (spec) url sha256; - name = name'; - } + { + inherit (spec) url sha256; + name = name'; + } else pkgs.fetchurl { inherit (spec) url sha256; name = name'; }; - fetch_tarball = pkgs: name: spec: - let - name' = sanitizeName name + "-src"; - in + fetch_tarball = pkgs: name: spec: let + name' = sanitizeName name + "-src"; + in if spec.builtin or true then builtins_fetchTarball - { - name = name'; - inherit (spec) url sha256; - } + { + name = name'; + inherit (spec) url sha256; + } else pkgs.fetchzip { name = name'; inherit (spec) url sha256; }; - fetch_git = name: spec: - let - ref = - spec.ref - or ( - if spec ? branch - then "refs/heads/${spec.branch}" - else if spec ? tag - then "refs/tags/${spec.tag}" - else abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!" - ); - in + fetch_git = name: spec: let + ref = + spec.ref + or ( + if spec ? branch + then "refs/heads/${spec.branch}" + else if spec ? tag + then "refs/tags/${spec.tag}" + else abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!" + ); + in builtins.fetchGit { url = spec.repo; inherit (spec) rev; @@ -59,12 +56,12 @@ let fetch_builtin-tarball = name: throw - '' [${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`. + '' [${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`. $ niv modify ${name} -a type=tarball -a builtin=true''; fetch_builtin-url = name: throw - '' [${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`. + '' [${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`. $ niv modify ${name} -a type=file -a builtin=true''; # @@ -74,34 +71,33 @@ let # https://github.com/NixOS/nixpkgs/pull/83241/files#diff-c6f540a4f3bfa4b0e8b6bafd4cd54e8bR695 sanitizeName = name: ( concatMapStrings - (s: - if builtins.isList s - then "-" - else s) - ( - builtins.split "[^[:alnum:]+._?=-]+" - ((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name) - ) + (s: + if builtins.isList s + then "-" + else s) + ( + builtins.split "[^[:alnum:]+._?=-]+" + ((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name) + ) ); # The set of packages used when specs are fetched using non-builtins. - mkPkgs = sources: system: - let - sourcesNixpkgs = - import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { inherit system; }; - hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; - hasThisAsNixpkgsPath = == ./.; - in + mkPkgs = sources: system: let + sourcesNixpkgs = + import (builtins_fetchTarball {inherit (sources.nixpkgs) url sha256;}) {inherit system;}; + hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; + hasThisAsNixpkgsPath = == ./.; + in if builtins.hasAttr "nixpkgs" sources then sourcesNixpkgs else if hasNixpkgsPath && ! hasThisAsNixpkgsPath - then import { } + then import {} else abort - '' - Please specify either (through -I or NIX_PATH=nixpkgs=...) or - add a package called "nixpkgs" to your sources.json. - ''; + '' + Please specify either (through -I or NIX_PATH=nixpkgs=...) or + add a package called "nixpkgs" to your sources.json. + ''; # The actual fetching function. fetch = pkgs: name: spec: @@ -123,22 +119,21 @@ let # If the environment variable NIV_OVERRIDE_${name} is set, then use # the path directly as opposed to the fetched source. - replace = name: drv: - let - saneName = - stringAsChars - (c: - if ((builtins.match "[a-zA-Z0-9]" c) == null) - then "_" - else c) - name; - ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}"; - in + replace = name: drv: let + saneName = + stringAsChars + (c: + if ((builtins.match "[a-zA-Z0-9]" c) == null) + then "_" + else c) + name; + ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}"; + in if ersatz == "" then drv else - # this turns the string into an actual Nix path (for both absolute and - # relative paths) + # this turns the string into an actual Nix path (for both absolute and + # relative paths) if builtins.substring 0 1 ersatz == "/" then /. + ersatz else /. + builtins.getEnv "PWD" + "/${ersatz}"; @@ -148,21 +143,21 @@ let # a Nix version of mapAttrs if the built-in doesn't exist mapAttrs = builtins.mapAttrs - or ( + or ( f: set: with builtins; - listToAttrs (map - (attr: { - name = attr; - value = f attr set.${attr}; - }) - (attrNames set)) + listToAttrs (map + (attr: { + name = attr; + value = f attr set.${attr}; + }) + (attrNames set)) ); # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 range = first: last: if first > last - then [ ] + then [] else builtins.genList (n: first + n) (last - first + 1); # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 @@ -177,66 +172,61 @@ let optionalAttrs = cond: as: if cond then as - else { }; + else {}; # fetchTarball version that is compatible between all the versions of Nix - builtins_fetchTarball = - { url - , name ? null - , sha256 - , - } @ attrs: - let - inherit (builtins) lessThan nixVersion fetchTarball; - in + builtins_fetchTarball = { + url, + name ? null, + } @ attrs: let + inherit (builtins) lessThan nixVersion fetchTarball; + in if lessThan nixVersion "1.12" - then fetchTarball ({ inherit url; } // (optionalAttrs (name != null) { inherit name; })) + then fetchTarball ({inherit url;} // (optionalAttrs (name != null) {inherit name;})) else fetchTarball attrs; # fetchurl version that is compatible between all the versions of Nix - builtins_fetchurl = - { url - , name ? null - , sha256 - , - } @ attrs: - let - inherit (builtins) lessThan nixVersion fetchurl; - in + builtins_fetchurl = { + url, + name ? null, + } @ attrs: let + inherit (builtins) lessThan nixVersion fetchurl; + in if lessThan nixVersion "1.12" - then fetchurl ({ inherit url; } // (optionalAttrs (name != null) { inherit name; })) + then fetchurl ({inherit url;} // (optionalAttrs (name != null) {inherit name;})) else fetchurl attrs; # Create the final "sources" from the config mkSources = config: mapAttrs - ( - name: spec: - if builtins.hasAttr "outPath" spec - then - abort - "The values in sources.json should not have an 'outPath' attribute" - else spec // { outPath = replace name (fetch config.pkgs name spec); } - ) - config.sources; + ( + name: spec: + if builtins.hasAttr "outPath" spec + then + abort + "The values in sources.json should not have an 'outPath' attribute" + else spec // {outPath = replace name (fetch config.pkgs name spec);} + ) + config.sources; # The "config" used by the fetchers - mkConfig = - { sourcesFile ? if builtins.pathExists ./sources.json + mkConfig = { + sourcesFile ? + if builtins.pathExists ./sources.json then ./sources.json - else null - , sources ? if (sourcesFile == null) - then { } - else builtins.fromJSON (builtins.readFile sourcesFile) - , system ? builtins.currentSystem - , pkgs ? mkPkgs sources system - , - }: rec { - # The sources, i.e. the attribute set of spec name to spec - inherit sources; + else null, + sources ? + if (sourcesFile == null) + then {} + else builtins.fromJSON (builtins.readFile sourcesFile), + system ? builtins.currentSystem, + pkgs ? mkPkgs sources system, + }: rec { + # The sources, i.e. the attribute set of spec name to spec + inherit sources; - # The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers - inherit pkgs; - }; + # The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers + inherit pkgs; + }; in -mkSources (mkConfig { }) // { __functor = _: settings: mkSources (mkConfig settings); } + mkSources (mkConfig {}) // {__functor = _: settings: mkSources (mkConfig settings);} diff --git a/test/treefmt.toml b/test/treefmt.toml index f5ac8aa..04a778d 100644 --- a/test/treefmt.toml +++ b/test/treefmt.toml @@ -27,7 +27,7 @@ includes = ["*.hs"] excludes = ["examples/haskell/"] [formatter.nix] -command = "nixpkgs-fmt" +command = "alejandra" includes = ["*.nix"] # Act as an example on how to exclude specific files excludes = ["examples/nix/sources.nix"] @@ -39,7 +39,7 @@ includes = ["*.rb"] [formatter.prettier] command = "prettier" -options = ["--write"] +options = ["--write", "--tab-width", "4"] includes = [ "*.css", "*.html",