{
  "name": "gp-libs",
  "url": "https://gp-libs.git-pull.com",
  "description": "Test and documentation utilities for git-pull projects.",
  "sourceRepository": "https://github.com/git-pull/gp-libs/",
  "agentEntrypoints": {
    "manifest": "/docs.json",
    "llms": "/llms.txt",
    "llmsFull": "/llms-full.txt"
  },
  "pages": [
    {
      "title": "Changelog",
      "description": "To install the unreleased gp-libs version, see developmental releases.",
      "section": "Documentation",
      "url": "/history/",
      "markdownUrl": "/history.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Changelog"
        },
        {
          "id": "gp-libs-0-0-19-unreleased",
          "level": 2,
          "text": "gp-libs 0.0.19 (unreleased)"
        },
        {
          "id": "gp-libs-0-0-18-2026-06-27",
          "level": 2,
          "text": "gp-libs 0.0.18 (2026-06-27)"
        },
        {
          "id": "what-s-new",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "project-commands-now-use-just-60",
          "level": 4,
          "text": "Project commands now use just (#60)"
        },
        {
          "id": "documentation-now-follows-the-library-skeleton-pattern-65",
          "level": 4,
          "text": "Documentation now follows the Library Skeleton pattern (#65)"
        },
        {
          "id": "shared-gp-sphinx-docs-platform-66",
          "level": 4,
          "text": "Shared gp-sphinx docs platform (#66)"
        },
        {
          "id": "api-reference-visuals-from-gp-sphinx-67",
          "level": 4,
          "text": "API reference visuals from gp-sphinx (#67)"
        },
        {
          "id": "faster-steadier-docs-frontend-63",
          "level": 4,
          "text": "Faster, steadier docs frontend (#63)"
        },
        {
          "id": "fixes",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "sphinx-build-output-no-longer-breaks-collection-75",
          "level": 4,
          "text": "Sphinx _build/ output no longer breaks collection (#75)"
        },
        {
          "id": "documentation",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "development",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-17-2025-12-07",
          "level": 2,
          "text": "gp-libs 0.0.17 (2025-12-07)"
        },
        {
          "id": "id1",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "pypi-releases-use-trusted-publisher-57",
          "level": 4,
          "text": "PyPI releases use Trusted Publisher (#57)"
        },
        {
          "id": "gp-libs-0-0-16-2025-11-25",
          "level": 2,
          "text": "gp-libs 0.0.16 (2025-11-25)"
        },
        {
          "id": "id2",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "built-in-pytest-doctest-can-be-restored-programmatically-56",
          "level": 4,
          "text": "Built-in pytest doctest can be restored programmatically (#56)"
        },
        {
          "id": "id3",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "autouse-fixtures-apply-to-collected-doctest-files-56",
          "level": 4,
          "text": "Autouse fixtures apply to collected doctest files (#56)"
        },
        {
          "id": "indented-doctest-comments-are-recognized-56",
          "level": 4,
          "text": "Indented doctest comments are recognized (#56)"
        },
        {
          "id": "id4",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-15-2025-11-01",
          "level": 2,
          "text": "gp-libs 0.0.15 (2025-11-01)"
        },
        {
          "id": "breaking-changes",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "python-3-10-is-now-required-54",
          "level": 4,
          "text": "Python 3.10 is now required (#54)"
        },
        {
          "id": "id5",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-14-2025-10-26",
          "level": 2,
          "text": "gp-libs 0.0.14 (2025-10-26)"
        },
        {
          "id": "id6",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "doctest-directives-auto-register-outside-pytest-52",
          "level": 4,
          "text": "Doctest directives auto-register outside pytest (#52)"
        },
        {
          "id": "gp-libs-0-0-13-2025-08-17",
          "level": 2,
          "text": "gp-libs 0.0.13 (2025-08-17)"
        },
        {
          "id": "id7",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "gp-libs-0-0-12-2025-07-12",
          "level": 2,
          "text": "gp-libs 0.0.12 (2025-07-12)"
        },
        {
          "id": "id8",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "id9",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-11-2025-02-22",
          "level": 2,
          "text": "gp-libs 0.0.11 (2025-02-22)"
        },
        {
          "id": "id10",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "pytest-asyncio-compatibility-46",
          "level": 4,
          "text": "pytest-asyncio compatibility (#46)"
        },
        {
          "id": "id11",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-10-2024-12-20",
          "level": 2,
          "text": "gp-libs 0.0.10 (2024-12-20)"
        },
        {
          "id": "id12",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "python-3-9-is-now-required-36",
          "level": 4,
          "text": "Python 3.9 is now required (#36)"
        },
        {
          "id": "id13",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "python-3-9-modernization-41",
          "level": 4,
          "text": "Python 3.9 modernization (#41)"
        },
        {
          "id": "gp-libs-0-0-9-2024-11-26",
          "level": 2,
          "text": "gp-libs 0.0.9 (2024-11-26)"
        },
        {
          "id": "id14",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "project-management-moved-from-poetry-to-uv-39",
          "level": 4,
          "text": "Project management moved from Poetry to uv (#39)"
        },
        {
          "id": "build-backend-moved-to-hatchling-39",
          "level": 4,
          "text": "Build backend moved to Hatchling (#39)"
        },
        {
          "id": "gp-libs-0-0-8-2024-10-19",
          "level": 2,
          "text": "gp-libs 0.0.8 (2024-10-19)"
        },
        {
          "id": "id15",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "final-python-3-8-line",
          "level": 4,
          "text": "Final Python 3.8 line"
        },
        {
          "id": "id16",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "id17",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-7-2024-03-24",
          "level": 2,
          "text": "gp-libs 0.0.7 (2024-03-24)"
        },
        {
          "id": "id18",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "new-docutils-and-myst-parser-floors",
          "level": 4,
          "text": "New docutils and MyST parser floors"
        },
        {
          "id": "id19",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "stricter-ruff-linting-31-32-33",
          "level": 4,
          "text": "Stricter ruff linting (#31, #32, #33)"
        },
        {
          "id": "gp-libs-0-0-6post0-2024-02-01",
          "level": 2,
          "text": "gp-libs 0.0.6post0 (2024-02-01)"
        },
        {
          "id": "dependencies",
          "level": 3,
          "text": "Dependencies"
        },
        {
          "id": "gp-libs-0-0-6-2024-02-01",
          "level": 2,
          "text": "gp-libs 0.0.6 (2024-02-01)"
        },
        {
          "id": "id20",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "pytest-8-support-29",
          "level": 4,
          "text": "pytest 8 support (#29)"
        },
        {
          "id": "id21",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-5-2023-12-03",
          "level": 2,
          "text": "gp-libs 0.0.5 (2023-12-03)"
        },
        {
          "id": "id22",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "public-docstrings-for-package-apis-28",
          "level": 4,
          "text": "Public docstrings for package APIs (#28)"
        },
        {
          "id": "id23",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-4-2023-11-19",
          "level": 2,
          "text": "gp-libs 0.0.4 (2023-11-19)"
        },
        {
          "id": "id24",
          "level": 3,
          "text": "Dependencies"
        },
        {
          "id": "id25",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "formatting-moved-from-black-to-ruff-format-27",
          "level": 4,
          "text": "Formatting moved from Black to ruff format (#27)"
        },
        {
          "id": "gp-libs-0-0-3-2023-10-14",
          "level": 2,
          "text": "gp-libs 0.0.3 (2023-10-14)"
        },
        {
          "id": "id26",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "cached-property-doctest-lookup-support-25",
          "level": 4,
          "text": "Cached-property doctest lookup support (#25)"
        },
        {
          "id": "pytest-collector-typing-fixes-25",
          "level": 4,
          "text": "pytest collector typing fixes (#25)"
        },
        {
          "id": "id27",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "gp-libs-0-0-2-2023-09-09",
          "level": 2,
          "text": "gp-libs 0.0.2 (2023-09-09)"
        },
        {
          "id": "id28",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "python-3-8-is-now-required-23",
          "level": 4,
          "text": "Python 3.8 is now required (#23)"
        },
        {
          "id": "gp-libs-0-0-1-2023-09-09",
          "level": 2,
          "text": "gp-libs 0.0.1 (2023-09-09)"
        },
        {
          "id": "id29",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "removed-sphinx-toctree-autodoc-fix",
          "level": 4,
          "text": "Removed sphinx_toctree_autodoc_fix"
        },
        {
          "id": "id30",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "doctest-runner-for-docutils-and-myst-documents",
          "level": 4,
          "text": "Doctest runner for docutils and MyST documents"
        },
        {
          "id": "pytest-plugin-for-documentation-doctests-3-7-9",
          "level": 4,
          "text": "pytest plugin for documentation doctests (#3, #7, #9)"
        },
        {
          "id": "sphinx-issue-references-become-links",
          "level": 4,
          "text": "Sphinx issue references become links"
        },
        {
          "id": "tabbed-doctest-examples-are-discovered-18",
          "level": 4,
          "text": "Tabbed doctest examples are discovered (#18)"
        },
        {
          "id": "id31",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "id32",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "id33",
          "level": 3,
          "text": "Development"
        }
      ]
    },
    {
      "title": "gp-libs",
      "description": "Test and documentation utilities for git-pull projects.",
      "section": "",
      "url": "/",
      "markdownUrl": "/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "gp-libs"
        },
        {
          "id": "install",
          "level": 2,
          "text": "Install"
        },
        {
          "id": "at-a-glance",
          "level": 2,
          "text": "At a glance"
        }
      ]
    },
    {
      "title": "Examples",
      "description": "The docs test suite executes the prompt examples on this page. That keeps the examples aligned with doctest_docutils.DocutilsDocTestFinder.",
      "section": "Documentation",
      "url": "/modules/doctest_docutils/examples/",
      "markdownUrl": "/modules/doctest_docutils/examples.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Examples"
        },
        {
          "id": "markdown-prompt-block",
          "level": 2,
          "text": "Markdown prompt block"
        },
        {
          "id": "myst-doctest-directive",
          "level": 2,
          "text": "MyST doctest directive"
        },
        {
          "id": "finder-result-names",
          "level": 2,
          "text": "Finder result names"
        }
      ]
    },
    {
      "title": "How-to",
      "description": "Use the module command with the file path:",
      "section": "Documentation",
      "url": "/modules/doctest_docutils/how-to/",
      "markdownUrl": "/modules/doctest_docutils/how-to.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "How-to"
        },
        {
          "id": "run-a-markdown-file",
          "level": 2,
          "text": "Run a Markdown file"
        },
        {
          "id": "run-a-restructuredtext-file",
          "level": 2,
          "text": "Run a reStructuredText file"
        },
        {
          "id": "see-collected-examples",
          "level": 2,
          "text": "See collected examples"
        },
        {
          "id": "compare-with-stdlib-doctest",
          "level": 2,
          "text": "Compare with stdlib doctest"
        }
      ]
    },
    {
      "title": "doctest_docutils",
      "description": "doctest_docutils runs Python doctest examples from documentation files. It parses reStructuredText through docutils and Markdown through myst-parser, then collects the examples a reader sees in the...",
      "section": "Documentation",
      "url": "/modules/doctest_docutils/",
      "markdownUrl": "/modules/doctest_docutils/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "doctest_docutils"
        },
        {
          "id": "default-command",
          "level": 2,
          "text": "Default command"
        }
      ]
    },
    {
      "title": "API reference",
      "description": "Doctest module for docutils.",
      "section": "Documentation",
      "url": "/modules/doctest_docutils/reference/",
      "markdownUrl": "/modules/doctest_docutils/reference.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "API reference"
        },
        {
          "id": "doctest_docutils.is_allowed_version",
          "level": 2,
          "text": "is_allowed_version()"
        },
        {
          "id": "doctest_docutils.TestDirective",
          "level": 2,
          "text": "TestDirective"
        },
        {
          "id": "doctest_docutils.TestDirective.has_content",
          "level": 3,
          "text": "has_content"
        },
        {
          "id": "doctest_docutils.TestDirective.required_arguments",
          "level": 3,
          "text": "required_arguments"
        },
        {
          "id": "doctest_docutils.TestDirective.optional_arguments",
          "level": 3,
          "text": "optional_arguments"
        },
        {
          "id": "doctest_docutils.TestDirective.final_argument_whitespace",
          "level": 3,
          "text": "final_argument_whitespace"
        },
        {
          "id": "doctest_docutils.TestDirective.get_source_info",
          "level": 3,
          "text": "get_source_info()"
        },
        {
          "id": "doctest_docutils.TestDirective.set_source_info",
          "level": 3,
          "text": "set_source_info()"
        },
        {
          "id": "doctest_docutils.TestDirective.run",
          "level": 3,
          "text": "run()"
        },
        {
          "id": "doctest_docutils.TestsetupDirective",
          "level": 2,
          "text": "TestsetupDirective"
        },
        {
          "id": "doctest_docutils.TestsetupDirective.option_spec",
          "level": 3,
          "text": "option_spec"
        },
        {
          "id": "doctest_docutils.TestcleanupDirective",
          "level": 2,
          "text": "TestcleanupDirective"
        },
        {
          "id": "doctest_docutils.TestcleanupDirective.option_spec",
          "level": 3,
          "text": "option_spec"
        },
        {
          "id": "doctest_docutils.DoctestDirective",
          "level": 2,
          "text": "DoctestDirective"
        },
        {
          "id": "doctest_docutils.DoctestDirective.option_spec",
          "level": 3,
          "text": "option_spec"
        },
        {
          "id": "doctest_docutils.MockTabDirective",
          "level": 2,
          "text": "MockTabDirective"
        },
        {
          "id": "doctest_docutils.MockTabDirective.run",
          "level": 3,
          "text": "run()"
        },
        {
          "id": "doctest_docutils.setup",
          "level": 2,
          "text": "setup()"
        },
        {
          "id": "doctest_docutils._directive_registry",
          "level": 2,
          "text": "_directive_registry()"
        },
        {
          "id": "doctest_docutils._ensure_directives_registered",
          "level": 2,
          "text": "_ensure_directives_registered()"
        },
        {
          "id": "doctest_docutils.DocTestFinderNameDoesNotExist",
          "level": 2,
          "text": "DocTestFinderNameDoesNotExist"
        },
        {
          "id": "doctest_docutils.DocTestFinderNameDoesNotExist.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "doctest_docutils.DocutilsDocTestFinder",
          "level": 2,
          "text": "DocutilsDocTestFinder"
        },
        {
          "id": "doctest_docutils.DocutilsDocTestFinder.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "doctest_docutils.DocutilsDocTestFinder.find",
          "level": 3,
          "text": "find()"
        },
        {
          "id": "doctest_docutils.DocutilsDocTestFinder._find",
          "level": 3,
          "text": "_find()"
        },
        {
          "id": "doctest_docutils.DocutilsDocTestFinder._get_test",
          "level": 3,
          "text": "_get_test()"
        },
        {
          "id": "doctest_docutils.TestDocutilsPackageRelativeError",
          "level": 2,
          "text": "TestDocutilsPackageRelativeError"
        },
        {
          "id": "doctest_docutils.TestDocutilsPackageRelativeError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "doctest_docutils.testdocutils",
          "level": 2,
          "text": "testdocutils()"
        },
        {
          "id": "doctest_docutils._test",
          "level": 2,
          "text": "_test()"
        }
      ]
    },
    {
      "title": "Tutorial",
      "description": "Start with a Markdown file that contains one Python prompt example:",
      "section": "Documentation",
      "url": "/modules/doctest_docutils/tutorial/",
      "markdownUrl": "/modules/doctest_docutils/tutorial.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Tutorial"
        }
      ]
    },
    {
      "title": "Module guides",
      "description": "Each public gp-libs module has a small guide tree: start with the hub, follow a tutorial or how-to when you need a workflow, then use examples and API reference pages for details.",
      "section": "Documentation",
      "url": "/modules/",
      "markdownUrl": "/modules/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Module guides"
        }
      ]
    },
    {
      "title": "Custom patterns",
      "description": "issue_re optionally changes which plain-text references become links. The pattern must expose exactly one capturing group. Use a named group when your issue_url_tpl references {issue_id}.",
      "section": "Documentation",
      "url": "/modules/linkify_issues/custom-patterns/",
      "markdownUrl": "/modules/linkify_issues/custom-patterns.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Custom patterns"
        }
      ]
    },
    {
      "title": "Examples",
      "description": "With the default pattern, source text such as #123 links to the matching issue URL.",
      "section": "Documentation",
      "url": "/modules/linkify_issues/examples/",
      "markdownUrl": "/modules/linkify_issues/examples.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Examples"
        },
        {
          "id": "default-github-issues",
          "level": 2,
          "text": "Default GitHub issues"
        },
        {
          "id": "prefixed-issue-keys",
          "level": 2,
          "text": "Prefixed issue keys"
        }
      ]
    },
    {
      "title": "How-to",
      "description": "In your Sphinx conf.py, add the extension:",
      "section": "Documentation",
      "url": "/modules/linkify_issues/how-to/",
      "markdownUrl": "/modules/linkify_issues/how-to.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "How-to"
        }
      ]
    },
    {
      "title": "linkify_issues",
      "description": "linkify_issues is a Sphinx extension that turns plain issue references such as #1 into links such as #1. Add the extension and set issue_url_tpl; the default pattern already handles numbered GitHub...",
      "section": "Documentation",
      "url": "/modules/linkify_issues/",
      "markdownUrl": "/modules/linkify_issues/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "linkify_issues"
        }
      ]
    },
    {
      "title": "API reference",
      "description": "Autolinking extension for Sphinx.",
      "section": "Documentation",
      "url": "/modules/linkify_issues/reference/",
      "markdownUrl": "/modules/linkify_issues/reference.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "API reference"
        },
        {
          "id": "linkify_issues.DEFAULT_ISSUE_RE",
          "level": 2,
          "text": "DEFAULT_ISSUE_RE"
        },
        {
          "id": "linkify_issues.LinkifyIssues",
          "level": 2,
          "text": "LinkifyIssues"
        },
        {
          "id": "linkify_issues.LinkifyIssues.default_priority",
          "level": 3,
          "text": "default_priority"
        },
        {
          "id": "linkify_issues.LinkifyIssues.apply",
          "level": 3,
          "text": "apply()"
        },
        {
          "id": "linkify_issues.SetupDict",
          "level": 2,
          "text": "SetupDict"
        },
        {
          "id": "linkify_issues.SetupDict.version",
          "level": 3,
          "text": "version"
        },
        {
          "id": "linkify_issues.SetupDict.parallel_read_safe",
          "level": 3,
          "text": "parallel_read_safe"
        },
        {
          "id": "linkify_issues.SetupDict.parallel_write_safe",
          "level": 3,
          "text": "parallel_write_safe"
        },
        {
          "id": "linkify_issues.setup",
          "level": 2,
          "text": "setup()"
        }
      ]
    },
    {
      "title": "Examples",
      "description": "Run a Markdown documentation file directly:",
      "section": "Documentation",
      "url": "/modules/pytest_doctest_docutils/examples/",
      "markdownUrl": "/modules/pytest_doctest_docutils/examples.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Examples"
        },
        {
          "id": "markdown-file",
          "level": 2,
          "text": "Markdown file"
        },
        {
          "id": "documentation-directory",
          "level": 2,
          "text": "Documentation directory"
        },
        {
          "id": "python-modules",
          "level": 2,
          "text": "Python modules"
        }
      ]
    },
    {
      "title": "Fixtures",
      "description": "Documentation doctests do not receive ordinary named fixtures as direct function arguments. Share values through doctest_namespace or through autouse fixtures in a visible conftest.py.",
      "section": "Documentation",
      "url": "/modules/pytest_doctest_docutils/fixtures/",
      "markdownUrl": "/modules/pytest_doctest_docutils/fixtures.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Fixtures"
        },
        {
          "id": "doctest-namespace",
          "level": 2,
          "text": "doctest_namespace"
        },
        {
          "id": "autouse-fixtures",
          "level": 2,
          "text": "Autouse fixtures"
        }
      ]
    },
    {
      "title": "How-to",
      "description": "Run one Markdown file:",
      "section": "Documentation",
      "url": "/modules/pytest_doctest_docutils/how-to/",
      "markdownUrl": "/modules/pytest_doctest_docutils/how-to.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "How-to"
        },
        {
          "id": "run-documentation-files",
          "level": 2,
          "text": "Run documentation files"
        },
        {
          "id": "include-python-module-doctests",
          "level": 2,
          "text": "Include Python module doctests"
        },
        {
          "id": "keep-pytest-s-built-in-doctest-plugin-disabled",
          "level": 2,
          "text": "Keep pytest’s built-in doctest plugin disabled"
        }
      ]
    },
    {
      "title": "pytest_doctest_docutils",
      "description": "pytest_doctest_docutils lets pytest collect doctests from .rst and .md files. Point pytest at a documentation file or directory, and the plugin parses each page through doctest_docutils before pyte...",
      "section": "Documentation",
      "url": "/modules/pytest_doctest_docutils/",
      "markdownUrl": "/modules/pytest_doctest_docutils/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "pytest_doctest_docutils"
        },
        {
          "id": "default-command",
          "level": 2,
          "text": "Default command"
        }
      ]
    },
    {
      "title": "API reference",
      "description": "pytest plugin for doctest w/ reStructuredText and markdown.",
      "section": "Documentation",
      "url": "/modules/pytest_doctest_docutils/reference/",
      "markdownUrl": "/modules/pytest_doctest_docutils/reference.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "API reference"
        },
        {
          "id": "pytest_doctest_docutils.pytest_addoption",
          "level": 2,
          "text": "pytest_addoption()"
        },
        {
          "id": "pytest_doctest_docutils.pytest_configure",
          "level": 2,
          "text": "pytest_configure()"
        },
        {
          "id": "pytest_doctest_docutils._unblock_doctest",
          "level": 2,
          "text": "_unblock_doctest()"
        },
        {
          "id": "pytest_doctest_docutils.pytest_unconfigure",
          "level": 2,
          "text": "pytest_unconfigure()"
        },
        {
          "id": "pytest_doctest_docutils.pytest_ignore_collect",
          "level": 2,
          "text": "pytest_ignore_collect()"
        },
        {
          "id": "pytest_doctest_docutils.pytest_collect_file",
          "level": 2,
          "text": "pytest_collect_file()"
        },
        {
          "id": "pytest_doctest_docutils._is_doctest",
          "level": 2,
          "text": "_is_doctest()"
        },
        {
          "id": "pytest_doctest_docutils._init_runner_class",
          "level": 2,
          "text": "_init_runner_class()"
        },
        {
          "id": "pytest_doctest_docutils._get_allow_unicode_flag",
          "level": 2,
          "text": "_get_allow_unicode_flag()"
        },
        {
          "id": "pytest_doctest_docutils._get_allow_bytes_flag",
          "level": 2,
          "text": "_get_allow_bytes_flag()"
        },
        {
          "id": "pytest_doctest_docutils._get_number_flag",
          "level": 2,
          "text": "_get_number_flag()"
        },
        {
          "id": "pytest_doctest_docutils._get_flag_lookup",
          "level": 2,
          "text": "_get_flag_lookup()"
        },
        {
          "id": "pytest_doctest_docutils.get_optionflags",
          "level": 2,
          "text": "get_optionflags()"
        },
        {
          "id": "pytest_doctest_docutils._get_runner",
          "level": 2,
          "text": "_get_runner()"
        },
        {
          "id": "pytest_doctest_docutils.DocutilsDocTestRunner",
          "level": 2,
          "text": "DocutilsDocTestRunner"
        },
        {
          "id": "pytest_doctest_docutils.DocutilsDocTestRunner.summarize",
          "level": 3,
          "text": "summarize()"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile",
          "level": 2,
          "text": "DocTestDocutilsFile"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile.obj",
          "level": 3,
          "text": "obj"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile.collect",
          "level": 3,
          "text": "collect()"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile._nodeid",
          "level": 3,
          "text": "_nodeid"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile._store",
          "level": 3,
          "text": "_store"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile.config",
          "level": 3,
          "text": "config"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile.name",
          "level": 3,
          "text": "name"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile.parent",
          "level": 3,
          "text": "parent"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile.path",
          "level": 3,
          "text": "path"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile.session",
          "level": 3,
          "text": "session"
        },
        {
          "id": "pytest_doctest_docutils.DocTestDocutilsFile._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        }
      ]
    },
    {
      "title": "Tutorial",
      "description": "Install gp-libs, put doctest examples in a Markdown or reStructuredText file, and point pytest at the file:",
      "section": "Documentation",
      "url": "/modules/pytest_doctest_docutils/tutorial/",
      "markdownUrl": "/modules/pytest_doctest_docutils/tutorial.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Tutorial"
        }
      ]
    },
    {
      "title": "Code Style",
      "description": "gp-libs uses ruff for both linting and formatting.",
      "section": "Documentation",
      "url": "/project/code-style/",
      "markdownUrl": "/project/code-style.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Code Style"
        },
        {
          "id": "formatting",
          "level": 2,
          "text": "Formatting"
        },
        {
          "id": "type-checking",
          "level": 2,
          "text": "Type Checking"
        },
        {
          "id": "docstrings",
          "level": 2,
          "text": "Docstrings"
        }
      ]
    },
    {
      "title": "Contributing",
      "description": "Install git, uv, and just.",
      "section": "Documentation",
      "url": "/project/contributing/",
      "markdownUrl": "/project/contributing.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Contributing"
        },
        {
          "id": "tests",
          "level": 2,
          "text": "Tests"
        },
        {
          "id": "automatically-run-tests-on-file-save",
          "level": 3,
          "text": "Automatically run tests on file save"
        },
        {
          "id": "documentation",
          "level": 2,
          "text": "Documentation"
        },
        {
          "id": "manual-documentation",
          "level": 3,
          "text": "Manual documentation"
        }
      ]
    },
    {
      "title": "Project",
      "description": "Information for contributors and maintainers.",
      "section": "Documentation",
      "url": "/project/",
      "markdownUrl": "/project/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Project"
        }
      ]
    },
    {
      "title": "Releasing",
      "description": "gp-libs is pre-1.0. Minor version bumps may include breaking changes.",
      "section": "Documentation",
      "url": "/project/releasing/",
      "markdownUrl": "/project/releasing.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Releasing"
        },
        {
          "id": "version-policy",
          "level": 2,
          "text": "Version policy"
        },
        {
          "id": "release-process",
          "level": 2,
          "text": "Release process"
        }
      ]
    },
    {
      "title": "Quickstart",
      "description": "Install the latest official release:",
      "section": "Documentation",
      "url": "/quickstart/",
      "markdownUrl": "/quickstart.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Quickstart"
        },
        {
          "id": "installation",
          "level": 2,
          "text": "Installation"
        },
        {
          "id": "developmental-releases",
          "level": 3,
          "text": "Developmental releases"
        }
      ]
    }
  ]
}
