Subject: [bug#42465] [PATCH 05/10] gnu: Add python-libcst.

From: Marius Bakke <[email-masked]>
Date: Sat, 25 Jul 2020 18:03:42 +0200

Tanguy Le Carrour <[email-masked]> writes:

> * gnu/packages/python-xyz.scm (python-libcst): New variable.

[...]
  
> +(define-public python-libcst
> +  (package
> +    (name "python-libcst")
> +    (version "0.3.7")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (pypi-uri "libcst" version))
> +              (sha256
> +               (base32
> +                "1wfd5m9jhk5x2qpz29pjhm9ypp5h3nlbk6xv4vzn4f45xdf5bv9x"))))
> +    (build-system python-build-system)
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (add-after 'unpack 'remove-failing-tests
> +           (lambda _
> +             ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
> +             (delete-file "libcst/tests/test_fuzz.py")
> +             ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
> +             (delete-file "libcst/tests/test_pyre_integration.py")
> +             (delete-file "libcst/codemod/tests/test_codemod_cli.py")
> +             (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
> +             (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
> +             #t))
> +         (replace 'check
> +           (lambda _
> +             (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
> +             (invoke "python" "-m" "libcst.codegen.generate" "visitors")
> +             (invoke "python" "-m" "libcst.codegen.generate" "return_types")
> +             (invoke "python" "-m" "unittest")
> +             #t)))))

Nice.  :-)

> +    (native-inputs
> +     `(("python-black" ,python-black)
> +       ("python-hypothesis" ,python-hypothesis)
> +       ("python-isort" ,python-isort)))
> +    (propagated-inputs
> +     `(("python-typing-extensions" ,python-typing-extensions)
> +       ("python-typing-inspect" ,python-typing-inspect)
> +       ("python-pyyaml" ,python-pyyaml)))
> +    (home-page "https://github.com/Instagram/LibCST")
> +    (synopsis "A Concrete Syntax Tree (CST) parser and serializer library for Python")

No article in the start of synopsis (guix lint will warn about this).
So this becomes: "Concrete Syntax Tree (CST) parser and serializer
library for Python".

> +    (description
> +     "LibCST parses Python 3.0, 3.1, 3.3, 3.5, 3.6, 3.7 or 3.8 source code as a CST tree
> +that keeps all formatting details (comments, whitespaces, parentheses, etc).  It's useful
> +for building automated refactoring (codemod) applications and linters.  LibCST creates
> +a compromise between an Abstract Syntax Tree (AST) and a traditional Concrete Syntax
> +Tree (CST).  By carefully reorganizing and naming node types and fields, we've created
> +a lossless CST that looks and feels like an AST.")

Maybe the versions can be omitted so we don't have to update the
description for every update.  Also, the "we've created" sentence feels
weird, maybe s/we've created/LibCST creates/ ?

> +    (license (list license:expat
> +                   ;; Some files unde libcst/_parser/ are under Python Software
> +                   ;; Foundation license (see LICENSE file for details)
> +                   license:psfl
> +                   ;; libcst/_add_slots.py
> +                   license:asl2.0))))

Great!  :-)