Skip to content

v1.0.0

Latest
Compare
Choose a tag to compare
@jayqi jayqi released this 15 Feb 05:54
· 10 commits to main since this release
c6f4719

This release involves major changes to reprexlite. There is a significant refactoring of the library internals and also many changes to the API. This enabled new feature and more customizability.

This release also removes support for Python 3.6, 3.7, and 3.8.

CLI and IPython User Interfaces

Added

  • Added a new --editor/-e option to specify what editor to use. If not used, this has same behavior as before. This option is also the new way to launch the IPython interactive shell editor (by passing ipython).
  • Added new options to control parsing and output style.
    • --prompt and --continuation options let you set the primary and secondary prompt prefixes in rendered output. These default to empty srings "" for "reprex-style" output.
    • A new --parsing-method option controls input-parsing behavior.
      • The default value auto can automatically handle "reprex-style" input as well as "doctest-style`/Python REPL input.
      • A value declared will use the values of --prompt, --continuation, and --comment for parsing input in addition to styling output. To handle input and output with different styes, you can override input-side values with the --input-prompt, --input-continuation, and --input-comment options.
  • Added support for configuration files, including support for [tool.reprexlite] in pyproject.toml files and for user-level configuration. See "Configuration" for more details.

Changed

  • Changed the way to access the IPython interactive shell editor. This is now launched by using the new --editor/-e option by passing ipython. The IPython shell editor also now respects other command line configuration options. It is now considered a stable feature and is no longer experimental.
  • Renamed the --old-results option to --keep-old-results.

Fixed

  • Fixed bug that silenced output when using the IPython cell magic or the IPython shell editor and encountering an error where reprexlite couldn't render your code (such as a syntax error). This should now display an informative error message.

Library

Added

  • Added new reprexlite.parsing module which contains functions for parsing input. These functions yield tuples representing lines of the input with an enum indicating whether the line is code or a result.
  • Added new reprexlite.reprexes module which contains code for evaluating a reprex.
    • The new Reprex dataclass serves as the main container for reprex data. It holds parallel lists of Statement, ParsedResult, and RawResult data.
      • The Reprex.from_input_lines factory method creates a Reprex from the output of the reprexlite.parsing parsing functions.
      • The Reprex.from_input factory method wraps parsing and takes a string input.
    • The Statement dataclass holds code data and parsed concrete syntax tree. This serves a similar purpose to the old Statement class.
    • The ParsedResult dataclass holds old evaluation results parsed from the input, if any.
    • The RawResult dataclass holds the returned values from evaluating code. This serves a similar purpose to the old Result class.
  • Added new reprexlite.config module and ReprexConfig dataclass for holding configuration values.
  • Added new reprexlite.exceptions module with exception classes that subclass a base exception class ReprexliteException.

Changed

  • Changed formatting abstractions in reprexlite.formatting module.
    • Rather than *Reprex classes that encapsulate reprex data, we now have formatter callables and take a rendered reprex output string as input and appropriately prepares the reprex output for a venue, such as adding venue-specific markup.
    • The venues_dispatcher dictionary in reprexlite.formatting is now a formatter_registry dictionary-like.
    • Formatters are added to the registry using a formatter_registry.register decorator instead of being hard-coded.

Removed

  • Removed reprexlite.code module. The functionality in this module was reimplemented in the new reprexlite.reprexes and reprexlite.parsing modules.
  • Removed reprexlite.reprex module. The reprex function has been moved to reprexlite.reprexes.

General

Added

  • Added a "Rendering and Output Venues" page to the documentation that documents the different formatting options with examples.
  • Added a "Configuration" page to the documentation that provides a reference for configuration options and documents how to use configuration files.
  • Added an "Alternatives" page to the documentation that documents alternative tools.

Changed

  • Changed reprexlite to use a pyproject.toml-based build process and metadata declaration.
  • Renamed HISTORY.md to CHANGELOG.md.