Add plugin hook for dynamic class definition #5875
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #5508
The new hook allows this:
This plugin hook is useful for SQLAlchemy ORM, for user-defined constructs similar to
namedtuple()
, and maybe we can even re-implementnamedtuple()
as a plugin at some point.Here are some comments:
basic_new_typeinfo()
to semantic analyzer API, because it is hard to find a signature that would satisfy all possible use cases. Instead I add justadd_symbol_table_node()
andqualified_name()
, so that a user can constructTypeInfo
manually and add it to the symbol table. We can reconsider this when we will have more experience with this hook, and add a dedicated utility method.semanal_shared.py
hasadd_symbol_table_node()
, but I think it is outdated, and should be replaced withadd_symbol()
which is IMO better (this is unrelated to this PR, but if you agree I will open an issue).