Description
this is a rough sketch of alternative to #5418 and builds upon marks - proposals for a new api and a path forward
as a starting point we should elevate actual markers from the need to register a name with us,
they should use the solid python name-spacing systems using modules and type names
so we would switch the marker implementation from something like
Mark("skipif", (), {"condition": ..., "reason": ...})
to ConditionalSkip(condition=..., reason=...)
after freeing the actual marker registration up, we can then follow up with registering the names of marker constructors
something like the following in a conftest.py
/plugin
# use a hook to create 0-N object based markers for a classical declaration
# should warn if no implementation triggered and no element was in the ini-lines for markers
def pytest_make_marker(config, name, args, kwargs):
...
return MyMarker(*args, **kwargs)
# used to map well known mark names to their implementation,
# more than one one module may implement the same marker,
# implemented by the pytest core `pytest_make_marker` hook
@pytest.markspec
def skip_if(condition, reason=None) -> Option[ConditionalSkip]:
return ConditionalSkip(condition, reason)
# make a marker known that acts as a symbol, perhaps this should use a different function name
xfail = pytest.markspec.symbol("xfail")
lookup should happen in terms of types for the new style markers
the name based lookup need to be expanded in terms of looking up the types that natch a name