jtojnar / nixpkgs-hammering

Beat your package expressions into a shape
MIT License
245 stars 14 forks source link

Improve error messages for developers #18

Closed rmcgibbo closed 3 years ago

rmcgibbo commented 3 years ago

When experimenting with changing some of the internal nix expressions in lib/default.nix, I get the following unhelpful error message:

$ ./tools/nixpkgs-hammer -f ~/projects/nixpkgs python3Packages.vispy
error: infinite recursion encountered, at /home/mcgibbon/projects/nixpkgs/pkgs/top-level/all-packages.nix:11:6
(use '--show-trace' to show detailed location information)
Traceback (most recent call last):
  File "/home/mcgibbon/projects/nixpkgs-hammering/./tools/nixpkgs-hammer", line 227, in <module>
    main(args)
  File "/home/mcgibbon/projects/nixpkgs-hammering/./tools/nixpkgs-hammer", line 168, in main
    all_messages = nix_eval_json(all_messages_nix, args.json)
  File "/home/mcgibbon/projects/nixpkgs-hammering/./tools/nixpkgs-hammer", line 26, in nix_eval_json
    result = subprocess.check_output(
  File "/nix/store/3g9596lia3mdr753amydqs6ilr4iaf1m-python3-3.9.1/lib/python3.9/subprocess.py", line 420, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/nix/store/3g9596lia3mdr753amydqs6ilr4iaf1m-python3-3.9.1/lib/python3.9/subprocess.py", line 524, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['nix-instantiate', '--strict', '--json', '--eval', '-E', '\nlet\n    builtAttrs = [ "python3Packages.vispy" ];\n    packageSet = /home/mcgibbon/projects/nixpkgs;\n    namePositions = [\n        ({ column = 3; file = "/home/mcgibbon/projects/nixpkgs/pkgs/development/python-modules/vispy/default.nix"; line = 7; })\n    ];\n\n    pkgs = import /home/mcgibbon/projects/nixpkgs {\n        overlays = [\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/duplicate-check-inputs.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/missing-phase-hooks.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/attribute-ordering.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/python-explicit-check-phase.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/patch-phase.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/meson-cmake.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/python-imports-check-typo.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/python-include-tests.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/fixup-phase.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/python-inconsistent-interpreters.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/build-tools-in-build-inputs.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/unnecessary-parallel-building.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/unclear-gpl.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n            (import /home/mcgibbon/projects/nixpkgs-hammering/overlays/explicit-phases.nix {\n                inherit builtAttrs packageSet namePositions;\n            })\n\n        ];\n    };\nin {\n\n    "python3Packages.vispy" = if pkgs.python3Packages.vispy or null == null then\n        [ {\n            name = "AttrPathNotFound";\n            msg = "Packages in ‘/home/mcgibbon/projects/nixpkgs’ do not contain ‘python3Packages.vispy’ attribute.";\n            severity = "error";\n            link = false;\n        } ]\n    else\n        pkgs.python3Packages.vispy.__nixpkgs-hammering-state.reports or [];\n\n}\n']' returned non-zero exit status 1.

It would help to improve the experience of developing nixpkgs-hammering if these error messages were more helpful (e.g. newlines rendered properly).