Skip to content

feat(implementation): add NormalImpl, WrapperImpl, and CompletionHook setup API - #707

Draft
RonnyPfannschmidt wants to merge 3 commits into
pytest-dev:mainfrom
RonnyPfannschmidt:refactor/hookimpl-wrapper-types
Draft

RonnyPfannschmidt wants to merge 3 commits into
pytest-dev:mainfrom
RonnyPfannschmidt:refactor/hookimpl-wrapper-types

Conversation

@RonnyPfannschmidt

@RonnyPfannschmidt RonnyPfannschmidt commented Jul 24, 2026 •

Copy link
Copy Markdown
Member

Written by Claude Opus 5.5 via Claude Code for the pluggy maintainers; I prompted it, it did the work, I read it.

Step 4 of 7, merges bottom-up: #703 → #704 → #706 → #707 → #708 → #709 → #710
The diff here is cumulative (steps 2–4); RonnyPfannschmidt#8 shows this step alone.

  • HookImpl becomes a base class holding hookimpl_config (opts stays as a deprecated alias), with NormalImpl and WrapperImpl subclasses that validate their configuration.
  • HookimplConfiguration.create_hookimpl() picks the subclass; registration and call_extra use it.
  • WrapperImpl.setup_and_get_completion_hook() exposes wrapper setup/teardown as a runtime-checkable CompletionHook, for old- and new-style wrappers alike.

@RonnyPfannschmidt
RonnyPfannschmidt force-pushed the refactor/hookimpl-wrapper-types branch 2 times, most recently from c5cf018 to 6338f75 Compare July 24, 2026 16:54
@RonnyPfannschmidt
RonnyPfannschmidt force-pushed the refactor/hookimpl-wrapper-types branch 3 times, most recently from 94a0f13 to d059564 Compare August 12, 2026 11:14
@RonnyPfannschmidt
RonnyPfannschmidt marked this pull request as draft September 9, 2026 20:20
@RonnyPfannschmidt
RonnyPfannschmidt force-pushed the refactor/hookimpl-wrapper-types branch from d059564 to ff3f28b Compare September 12, 2026 19:04
@RonnyPfannschmidt
RonnyPfannschmidt force-pushed the refactor/hookimpl-wrapper-types branch from ff3f28b to 7112526 Compare September 12, 2026 19:14
@RonnyPfannschmidt
RonnyPfannschmidt force-pushed the refactor/hookimpl-wrapper-types branch 3 times, most recently from 71942e0 to e6d8487 Compare September 24, 2026 11:24
RonnyPfannschmidt and others added 3 commits September 24, 2026 13:47
Markers attach HookspecConfiguration/HookimplConfiguration objects.
Registration discovers those privately; parse_hookimpl_opts and
parse_hookspec_opts remain a deprecated pytest concession that returns
legacy dicts and is only called when a subclass overrides them and no
modern configuration attribute was found.

Co-authored-by: Cursor AI <ai@cursor.sh>
Co-authored-by: Cursor Grok 4.5 <grok@cursor.com>
Complete design step 03: markers already attach configuration objects
since step 02; this finishes the step by storing the spec configuration
as HookSpec.config (try-claude naming) with a deprecated .opts alias,
reading .config in HookCaller firstresult resolution, and covering
decoration-time historic+firstresult validation and configuration
attachment with tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… setup API

Complete design step 04:

- HookImpl becomes a base class storing hookimpl_config (deprecated
  .opts alias kept) with arg binding moved to _get_call_args.
- NormalImpl / WrapperImpl subclasses validate their configuration;
  HookimplConfiguration.create_hookimpl() returns the right subclass
  (fixing the try-claude footgun of bare HookImpl for normals).
- WrapperImpl.setup_and_get_completion_hook() runs wrapper setup and
  returns a CompletionHook (runtime-checkable Protocol) that owns
  teardown, adapting old-style hookwrappers uniformly.
- Registration and call_extra construct impls via create_hookimpl;
  multicall binds args via _get_call_args. Full dual-sequence multicall
  rewiring lands with design step 05.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@RonnyPfannschmidt
RonnyPfannschmidt force-pushed the refactor/hookimpl-wrapper-types branch from e6d8487 to 885bf8a Compare September 24, 2026 11:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant