feat: align example treefmt config with flake treefmt config

Prevent unnecessary reformatting
This commit is contained in:
Brian McGee 2023-12-23 13:06:50 +00:00
parent 0c93d98483
commit 12452b01b6
Signed by: brianmcgee
GPG Key ID: D49016E76AD1E8C0
8 changed files with 215 additions and 209 deletions

View File

@ -55,7 +55,7 @@ func TestConfig(t *testing.T) {
// nix // nix
nix, ok := cfg.Formatters["nix"] nix, ok := cfg.Formatters["nix"]
as.True(ok, "nix formatter not found") as.True(ok, "nix formatter not found")
as.Equal("nixpkgs-fmt", nix.Command) as.Equal("alejandra", nix.Command)
as.Nil(nix.Options) as.Nil(nix.Options)
as.Equal([]string{"*.nix"}, nix.Includes) as.Equal([]string{"*.nix"}, nix.Includes)
as.Equal([]string{"examples/nix/sources.nix"}, nix.Excludes) as.Equal([]string{"examples/nix/sources.nix"}, nix.Excludes)
@ -72,7 +72,7 @@ func TestConfig(t *testing.T) {
prettier, ok := cfg.Formatters["prettier"] prettier, ok := cfg.Formatters["prettier"]
as.True(ok, "prettier formatter not found") as.True(ok, "prettier formatter not found")
as.Equal("prettier", prettier.Command) as.Equal("prettier", prettier.Command)
as.Equal([]string{"--write"}, prettier.Options) as.Equal([]string{"--write", "--tab-width", "4"}, prettier.Options)
as.Equal([]string{ as.Equal([]string{
"*.css", "*.css",
"*.html", "*.html",
@ -88,12 +88,12 @@ func TestConfig(t *testing.T) {
as.Equal([]string{"CHANGELOG.md"}, prettier.Excludes) as.Equal([]string{"CHANGELOG.md"}, prettier.Excludes)
// rust // rust
// rust, ok := cfg.Formatters["rust"] rust, ok := cfg.Formatters["rust"]
// as.True(ok, "rust formatter not found") as.True(ok, "rust formatter not found")
// as.Equal("rustfmt", rust.Command) as.Equal("rustfmt", rust.Command)
// as.Equal([]string{"--edition", "2018"}, rust.Options) as.Equal([]string{"--edition", "2018"}, rust.Options)
// as.Equal([]string{"*.rs"}, rust.Includes) as.Equal([]string{"*.rs"}, rust.Includes)
// as.Nil(rust.Excludes) as.Nil(rust.Excludes)
// shell // shell
shell, ok := cfg.Formatters["shell"] shell, ok := cfg.Formatters["shell"]

View File

@ -28,12 +28,11 @@
golangci-lint golangci-lint
# formatters for testing # formatters for testing
alejandra
elmPackages.elm-format elmPackages.elm-format
haskellPackages.cabal-fmt haskellPackages.cabal-fmt
haskellPackages.ormolu haskellPackages.ormolu
mdsh mdsh
nixpkgs-fmt
nodePackages.prettier nodePackages.prettier
python3.pkgs.black python3.pkgs.black
rufo rufo

View File

@ -15,7 +15,21 @@
statix.enable = true; 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 = { devshells.default = {

View File

@ -1,22 +1,22 @@
{ {
"type": "application", "type": "application",
"source-directories": ["src"], "source-directories": ["src"],
"elm-version": "0.19.1", "elm-version": "0.19.1",
"dependencies": { "dependencies": {
"direct": { "direct": {
"elm/browser": "1.0.2", "elm/browser": "1.0.2",
"elm/core": "1.0.5", "elm/core": "1.0.5",
"elm/html": "1.0.0" "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": { "test-dependencies": {
"elm/json": "1.1.3", "direct": {},
"elm/time": "1.0.0", "indirect": {}
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.2"
} }
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
} }

View File

@ -1,10 +1,10 @@
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>Title</title> <title>Title</title>
</head> </head>
<body> <body>
<h1>Hi!</h1> <h1>Hi!</h1>
</body> </body>
</html> </html>

View File

@ -1,65 +1,68 @@
const helloFactory = function ({ React }) { const helloFactory = function ({ React }) {
const { string, func } = React.PropTypes; const { string, func } = React.PropTypes;
return function Hello(props) { return function Hello(props) {
// React wants propTypes & defaultProps // React wants propTypes & defaultProps
// to be static. // to be static.
Hello.propTypes = { Hello.propTypes = {
word: string, word: string,
mode: string, mode: string,
actions: React.PropTypes.shape({ actions: React.PropTypes.shape({
setWord: func.isRequired, setWord: func.isRequired,
setMode: 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",
},
}; };
const onKeyUp = function (e) { return {
if (e.key !== "Enter") return; props, // set props
setWord(e.target.value); componentDidUpdate() {
setMode("display"); 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 (
<p>
Hello,&nbsp;
<span
style={styles.displayMode}
onClick={() => setMode("edit")}
>
{word}!
</span>
<input
ref="wordInput"
style={styles.editMode}
placeholder={word}
onKeyUp={onKeyUp}
/>
</p>
);
},
}; };
return (
<p>
Hello,&nbsp;
<span style={styles.displayMode} onClick={() => setMode("edit")}>
{word}!
</span>
<input
ref="wordInput"
style={styles.editMode}
placeholder={word}
onKeyUp={onKeyUp}
/>
</p>
);
},
}; };
};
}; };
export default helloFactory; export default helloFactory;

View File

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

View File

@ -27,7 +27,7 @@ includes = ["*.hs"]
excludes = ["examples/haskell/"] excludes = ["examples/haskell/"]
[formatter.nix] [formatter.nix]
command = "nixpkgs-fmt" command = "alejandra"
includes = ["*.nix"] includes = ["*.nix"]
# Act as an example on how to exclude specific files # Act as an example on how to exclude specific files
excludes = ["examples/nix/sources.nix"] excludes = ["examples/nix/sources.nix"]
@ -39,7 +39,7 @@ includes = ["*.rb"]
[formatter.prettier] [formatter.prettier]
command = "prettier" command = "prettier"
options = ["--write"] options = ["--write", "--tab-width", "4"]
includes = [ includes = [
"*.css", "*.css",
"*.html", "*.html",