Skip to content
Back to top
View this page

# Changes

## 10.0.1 (26 Mar 2026)

- Re-work `run_pytest()` to fix problems caused by re-invoking external plugins during the nested runs.

## 10.0.0 (25 Mar 2026)

- Moved to a uv-based, `pyproject.toml`-driven project layout, with `main` replacing `master` as the default git branch.

- Move from Circle CI to Github Actions for continuous integration and releasing.

- Introduce ruff code formatting.

- Fixed several issues with lexing of Markdown fenced code blocks.

- Add `run_pytest()` to for in-process pytest execution of example tests that use `fixtures` in documentation.

- Supported Python versions are now 3.11 onwards.

## 9.3.0 (2 Dec 2025)

- Add support for MyST `code-cell` directives.

- Provide `sybil.testing.check_sybil()`, `sybil.testing.check_parser()` and `sybil.testing.check_lexer()` to help test custom lexers and parsers.

- Add documentation around testing custom lexers and parsers.

## 9.2.0 (8 Aug 2025)

- Add support for a `NUMBER` option flag when using doctest.

## 9.1.0 (18 Feb 2025)

- The various “skip” parsers can now be subclassed to specify a different directive name.

- Clearer error message when a “skip” directive is encountered with missing parameters.

Thanks to Adam Dangoor for the work on these!

## 9.0.0 (12 Nov 2024)

- Retire `Document.find_region_sources()` in favour of using a `BlockLexer`. See the updated example.

- Better error messages when lexing fails to find the end of a block.

- Improved documentation.

## 8.0.1 (30 Oct 2024)

- Better error message when skip arguments are malformed.

- Remove unused constant that caused problems with development releases of pytest.

## 8.0.0 (20 Sep 2024)

- Drop Python 3.8 support.

- Internal code tidying.

Thanks to Adam Dangoor for the work on these!

## 7.1.1 (16 Sep 2024)

- Fix bug that broke docstring collection where a method had an `ellipsis` in place of the docstring.

## 7.1.0 (16 Sep 2024)

- Introduce a `pytest` extra, such that you can install Sybil in a way that ensures compatible versions of Sybil and pytest are used.

- Fix a `DeprecationWarning` on Python 3.13.

Thanks to Adam Dangoor for this fix.

## 7.0.0 (12 Sep 2024)

- Drop Python 3.7 support.

- Drop support for pytest versions less than 8.

- `Sybil` now takes a name which is used in any test identifiers it produces.

- Add support for `code` and `sourcecode` directives in both ReST and MyST.

- Fix bug in the pytest integration that prevented multiple `Sybil` instances from parsing the same file.

- Fix bug where escaped quotes were not correctly unescaped in regions extracted from docstrings.

- Restructure usage documentation, splitting out Test runner integration and Developing your own parsers documents and introducing a Concepts glossary.

## 6.1.1 (9 May 2024)

- Fix lexing of indented blocks where embedded blank lines would be erroneously removed.

## 6.1.0 (22 Apr 2024)

- Add support for lexing nested fenced codeblocks in markdown.

- Add support for tilde-delimited codeblocks in markdown.

- Fix bug with the end offset of codeblocks in markdown.

## 6.0.3 (31 Jan 2024)

- Support pytest 8 and above, due to yet another breaking change in an API Sybil relies on.

Thanks to Adam Dangoor for the fix.

## 6.0.2 (23 Nov 2023)

- Remove use of deprecated `py.path.local`.

## 6.0.1 (22 Nov 2023)

- Fix lexing of ReST directives and directives-in-comments where the directives were not separated by at least one newline.

## 6.0.0 (21 Nov 2023)

- The public interface is now fully typed and checked with `mypy`.

- Official support for Python 3.12 with Python 3.7 now being the minimum supported version.

- Markdown is now supported separately to MyST.

- `ReST` and `MyST` directives now have their options extracted as part of the lexing process.

- Added support for MyST single-line html-style comment directives.

- Fixed parsing of MyST directive options with no leading whitespace.

- Fixed parsing of Markdown and MyST fenced codeblocks at the end of documents with no trailing newline.

- Rework document evaluators to be more flexible and structured.

- skip has been reworked to check validity of operations and allow a reason to be provided for an unconditional skip so it can be highlighted as a skipped test in test runner output. The skip parsers are also now lexer-based.

- Make `Region.evaluator` optional, removing the need for the separate `LexedRegion` class.

Huge thanks to Adam Dangoor for all his work on typing!

## 5.0.3 (14 Jul 2023)

- Fix bug in traceback trimming on the latest release of pytest.

## 5.0.2 (19 May 2023)

- Fixed bug in the `repr()` of `LexedRegion` instances where a lexeme was `None`.

- Fixed lexing of ReST directives, such as `code-block`, where they occurred at the end of a docstring.

- Ensure the `namespace` in which doctests are evaluated always has a `__name__`. This is required by an implementation detail of `typing.runtime_checkable`.

## 5.0.1 (9 May 2023)

- Fix a bug that prevent r-prefixed docstrings from being correctly parsed from `.py` files.

## 5.0.0 (26 Mar 2023)

- By default, on Python 3.8 and above, when parsing `.py` files, only examples in docstrings will be parsed.

- The `namespace` can now be cleared in both ReST and MyST.

- Support for Python 3.6 has been dropped.

- Support for pytest versions earlier than 7.1 has been dropped.

## 4.0.1 (8 Feb 2023)

- Switch `sybil.parsers.myst.SkipParser()` to use the correct comment character.

- Note that the doctest extension needs to be enabled to render `doctest` directives.

- Warn about ReST and MyST doctest parsers and overlapping blocks.

## 4.0.0 (25 Dec 2022)

- Restructure to support lexing source languages such as ReST and MyST while testing examples in target languages such as Python, doctest and bash.

- Add support for MyST examples.

- Include a plan for migrating from `sphinx.ext.doctest`.

## 3.0.1 (25 Feb 2022)

- Continue with the ever shifting sands of pytest APIs, this time appeasing warnings from pytest 7 that when fixed break compatibility with pytest 6.

## 3.0.0 (26 Oct 2021)

- Require pytest 6.2.0.

- Drop Python 2 support.

- Add support for Python 3.10

- Remove the `encoding` parameter to `DocTestParser` as it is no longer used.

- `CodeBlockParser` has been renamed to `PythonCodeBlockParser`, see the Code blocks documentation for details.

- Support has been added to check examples in Python source code in addition to documentation source files.

- `FIX_BYTE_UNICODE_REPR` has been removed as it should no longer be needed.

Thanks to Stefan Behnel for his work on Code blocks parsing!

## 2.0.1 (29 Nov 2020)

- Make `DocTestParser` more permissive with respect to tabs in documents. Tabs that aren’t in the doctest block not longer cause parsing of the document to fail.

## 2.0.0 (17 Nov 2020)

- Drop support for nose.

- Handle encoded data returned by doctest execution on Python 2.

## 1.4.0 (5 Aug 2020)

- Support nested directories of source files rather than just one directory.

- Support multiple patterns of files to include.

## 1.3.1 (29 Jul 2020)

- Support pytest 6.

## 1.3.0 (28 Mar 2020)

- Treat all documentation source files as being `utf-8` encoded. This can be overridden by passing an encoding when instantiating a `Sybil`.

## 1.2.2 (20 Feb 2020)

- Improvements to `FIX_BYTE_UNICODE_REPR` for multiple strings on a single line.

- Better handling of files with Windows line endings on Linux under Python 2.

## 1.2.1 (21 Jan 2020)

- Fixes for pytest 3.1.0.

## 1.2.0 (28 Apr 2019)

- Only compile code in codeblocks at evaluation time, giving skip a chance to skip code blocks that won’t compile on a particular version of Python.

## 1.1.0 (25 Apr 2019)

- Move to CircleCI and Carthorse.

- Add warning about the limitations of `FIX_BYTE_UNICODE_REPR`.

- Support explicit filenames to include and patterns to exclude when instantiating a `Sybil`.

- Add the skip parser.

## 1.0.9 (1 Aug 2018)

- Fix for pytest 3.7+.

## 1.0.8 (6 Apr 2018)

- Changes only to unit tests to support fixes in the latest release of pytest.

## 1.0.7 (25 January 2018)

- Literal tabs may no longer be included in text that is parsed by the `DocTestParser`. Previously, tabs were expanded which could cause unpleasant problems.

## 1.0.6 (30 November 2017)

- Fix compatibility with pytest 3.3+.

Thanks to Bruno Oliveira for this fix!

## 1.0.5 (6 June 2017)

- Fix ordering issue that would cause some tests to fail when run on systems using tmpfs.

## 1.0.4 (5 June 2017)

- Fix another bug in `CodeBlockParser` where a `code-block` followed by a less-indented block would be incorrectly indented, resulting in a `SyntaxError`.

## 1.0.3 (2 June 2017)

- Fix bug in `CodeBlockParser` where it would incorrectly parse indented code blocks.

## 1.0.2 (1 June 2017)

- Fix bug in `CodeBlockParser` where it would not find indented code blocks.

## 1.0.1 (30 May 2017)

- Fix bug where unicode and byte literals weren’t corrected in doctest tracebacks, even when `FIX_BYTE_UNICODE_REPR` was specified.

## 1.0.0 (26 May 2017)

- Initial release