From be8e419f66e11d983f1b07dfb01c365287f5c0e6 Mon Sep 17 00:00:00 2001 From: Ananth Venkatesh Date: Sat, 1 Feb 2025 03:42:40 -0500 Subject: [PATCH 1/3] chore(nix): add pre-commit checks --- .pre-commit-config.yaml | 1 + flake.lock | 86 ++++++++++++++++++++++++++++++++++++++--- flake.nix | 19 ++++++++- 3 files changed, 99 insertions(+), 7 deletions(-) create mode 120000 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 120000 index 0000000..0b5ed9b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1 @@ +/nix/store/gnnangzf73g2b665rmhwblqydx18hjlm-pre-commit-config.json \ No newline at end of file diff --git a/flake.lock b/flake.lock index 2a83f74..58b8568 100644 --- a/flake.lock +++ b/flake.lock @@ -44,6 +44,43 @@ "type": "github" } }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "mkElmDerivation": { "inputs": { "elm-spa": "elm-spa", @@ -51,11 +88,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1737249952, - "narHash": "sha256-bWOrcJUIW5q9BEmdeaE5XPnHiWuhujeFM23EweNMuO0=", + "lastModified": 1737854574, + "narHash": "sha256-GIh8IAIjJ3BkqSKifdXcnrkJgY4diipcMZ1itmwiFyw=", "owner": "jeslie0", "repo": "mkElmDerivation", - "rev": "dd8538d8bcddcb7245cfdffffdf8118b0013dc64", + "rev": "88b3923af364826b39428aff3431857a2b9d8699", "type": "github" }, "original": { @@ -82,11 +119,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1737632463, - "narHash": "sha256-38J9QfeGSej341ouwzqf77WIHAScihAKCt8PQJ+NH28=", + "lastModified": 1738142207, + "narHash": "sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9+WC4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0aa475546ed21629c4f5bbf90e38c846a99ec9e9", + "rev": "9d3ae807ebd2981d593cddd0080856873139aa40", "type": "github" }, "original": { @@ -96,6 +133,22 @@ "type": "github" } }, + "nixpkgs_3": { + "locked": { + "lastModified": 1730768919, + "narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a04d33c0c3f1a59a2c1cb0c6e34cd24500e5a1dc", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "npm-fix": { "inputs": { "nixpkgs": [ @@ -134,10 +187,31 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1737465171, + "narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "mkElmDerivation": "mkElmDerivation", "nixpkgs": "nixpkgs_2", + "pre-commit-hooks": "pre-commit-hooks", "utils": "utils" } }, diff --git a/flake.nix b/flake.nix index 9a17dba..d327044 100644 --- a/flake.nix +++ b/flake.nix @@ -5,6 +5,7 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; utils.url = "github:numtide/flake-utils"; mkElmDerivation.url = "github:jeslie0/mkElmDerivation"; + pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; }; outputs = @@ -13,6 +14,7 @@ nixpkgs, utils, mkElmDerivation, + pre-commit-hooks, }: utils.lib.eachDefaultSystem ( system: @@ -26,10 +28,13 @@ devShells.default = with pkgs; mkShell { - buildInputs = [ + inherit (self.checks.${system}.pre-commit-check) shellHook; + + buildInputs = self.checks.${system}.pre-commit-check.enabledPackages ++ [ elmPackages.elm elmPackages.elm-test elmPackages.elm-format + elmPackages.elm-review entr ]; }; @@ -50,6 +55,18 @@ }; }; + checks = { + pre-commit-check = pre-commit-hooks.lib.${system}.run { + src = ./.; + hooks = { + nixfmt-rfc-style.enable = true; + elm-format.enable = true; + # elm-review.enable = true; + # elm-test.enable = true; + }; + }; + }; + formatter = nixpkgs.legacyPackages.${system}.nixfmt-rfc-style; } ); From f9d6147658ddf502d332e4c04485a5a127f31fc8 Mon Sep 17 00:00:00 2001 From: Ananth Venkatesh Date: Sat, 1 Feb 2025 03:44:20 -0500 Subject: [PATCH 2/3] chore(elm): add elm-review config --- review/elm.json | 41 ++++++++++++++++++++++++++ review/src/ReviewConfig.elm | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 review/elm.json create mode 100644 review/src/ReviewConfig.elm diff --git a/review/elm.json b/review/elm.json new file mode 100644 index 0000000..d8a16f7 --- /dev/null +++ b/review/elm.json @@ -0,0 +1,41 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/core": "1.0.5", + "elm/json": "1.1.3", + "elm/project-metadata-utils": "1.0.2", + "jfmengels/elm-review": "2.14.1", + "jfmengels/elm-review-code-style": "1.2.0", + "jfmengels/elm-review-common": "1.3.3", + "jfmengels/elm-review-debug": "1.0.8", + "jfmengels/elm-review-documentation": "2.0.4", + "jfmengels/elm-review-simplify": "2.1.6", + "jfmengels/elm-review-unused": "1.2.3", + "stil4m/elm-syntax": "7.3.8" + }, + "indirect": { + "elm/bytes": "1.0.8", + "elm/html": "1.0.0", + "elm/parser": "1.1.0", + "elm/random": "1.0.0", + "elm/regex": "1.0.0", + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.3", + "elm-explorations/test": "2.2.0", + "pzp1997/assoc-list": "1.0.0", + "rtfeldman/elm-hex": "1.0.0", + "stil4m/structured-writer": "1.0.3" + } + }, + "test-dependencies": { + "direct": { + "elm-explorations/test": "2.2.0" + }, + "indirect": {} + } +} \ No newline at end of file diff --git a/review/src/ReviewConfig.elm b/review/src/ReviewConfig.elm new file mode 100644 index 0000000..c645afe --- /dev/null +++ b/review/src/ReviewConfig.elm @@ -0,0 +1,57 @@ +module ReviewConfig exposing (config) + +{-| Do not rename the ReviewConfig module or the config function, because +`elm-review` will look for these. + +To add packages that contain rules, add them to this review project using + + `elm install author/packagename` + +when inside the directory containing this file. + +-} + +import Docs.ReviewAtDocs +import NoConfusingPrefixOperator +import NoDebug.Log +import NoDebug.TodoOrToString +import NoExposingEverything +import NoImportingEverything +import NoMissingTypeAnnotation +import NoMissingTypeAnnotationInLetIn +import NoMissingTypeExpose +import NoPrematureLetComputation +import NoSimpleLetBody +import NoUnused.CustomTypeConstructorArgs +import NoUnused.CustomTypeConstructors +import NoUnused.Dependencies +import NoUnused.Exports +import NoUnused.Parameters +import NoUnused.Patterns +import NoUnused.Variables +import Review.Rule as Rule exposing (Rule) +import Simplify + + +config : List Rule +config = + [ Docs.ReviewAtDocs.rule + , NoConfusingPrefixOperator.rule + , NoDebug.Log.rule + , NoDebug.TodoOrToString.rule + |> Rule.ignoreErrorsForDirectories [ "tests/" ] + , NoExposingEverything.rule + , NoMissingTypeAnnotation.rule + , NoMissingTypeAnnotationInLetIn.rule + , NoMissingTypeExpose.rule + , NoSimpleLetBody.rule + , NoPrematureLetComputation.rule + , NoUnused.CustomTypeConstructors.rule [] + , NoUnused.CustomTypeConstructorArgs.rule + , NoUnused.Dependencies.rule + , NoUnused.Exports.rule + , NoUnused.Parameters.rule + , NoUnused.Patterns.rule + , NoUnused.Variables.rule + , Simplify.rule Simplify.defaults + ] From 929360cd3062f624d4a85e135c4a28f4575c9dfb Mon Sep 17 00:00:00 2001 From: Ananth Venkatesh Date: Sat, 1 Feb 2025 03:44:59 -0500 Subject: [PATCH 3/3] fix(elm-review): eliminate all issues --- src/Main.elm | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Main.elm b/src/Main.elm index 4bc97b9..f214969 100644 --- a/src/Main.elm +++ b/src/Main.elm @@ -1,4 +1,4 @@ -module Main exposing (main) +module Main exposing (Flags, Model, Msg, Object3d, main) import Angle import Array @@ -11,7 +11,7 @@ import Element exposing (..) import Element.Background as Background import Element.Font as Font import Html exposing (Html) -import Http exposing (Error) +import Http import Length import Obj.Decode import Pixels @@ -61,11 +61,6 @@ animatedEl = animatedUi Element.el -animatedCol : Animation -> List (Element.Attribute msg) -> List (Element msg) -> Element msg -animatedCol = - animatedUi Element.column - - main : Program Flags Model Msg main = Browser.document { init = init, update = update, subscriptions = subscribe, view = view } @@ -81,9 +76,11 @@ type alias Flags = init : Flags -> ( Model, Cmd Msg ) init flags = - case flags of - ( width, height ) -> - ( { w = width, h = height, mesh = Nothing, textures = Nothing, angle = 0 }, Cmd.batch [ getMesh, getTexture ] ) + let + ( width, height ) = + flags + in + ( { w = width, h = height, mesh = Nothing, textures = Nothing, angle = 0 }, Cmd.batch [ getMesh, getTexture ] ) @@ -236,23 +233,29 @@ pyramidMesh : Mesh.Uniform coordinates pyramidMesh = let -- Define the vertices of our pyramid + frontLeft : Point3d Length.Meters coordinates frontLeft = Point3d.centimeters 250 500 0 + frontRight : Point3d Length.Meters coordinates frontRight = Point3d.centimeters 400 0 -500 + backLeft : Point3d Length.Meters coordinates backLeft = Point3d.centimeters -250 500 -500 + backRight : Point3d Length.Meters coordinates backRight = Point3d.centimeters -250 0 0 + tip : Point3d Length.Meters coordinates tip = Point3d.centimeters 0 0 500 -- Create a TriangularMesh value from an array of vertices and list -- of index triples defining faces (see https://package.elm-lang.org/packages/ianmackenzie/elm-triangular-mesh/latest/TriangularMesh#indexed) + triangularMesh : TriangularMesh (Point3d Length.Meters coordinates) triangularMesh = TriangularMesh.indexed (Array.fromList @@ -302,6 +305,7 @@ view3D model = { focalPoint = Point3d.origin , eyePoint = let + theta : Angle.Angle theta = Angle.degrees model.angle in