Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Partially restore old (imprecise) signature of Match.group() #3190

Merged
merged 1 commit into from
Aug 16, 2019

Conversation

ilevkivskyi
Copy link
Member

This partially reverts #3172

@ilevkivskyi
Copy link
Member Author

@srittau @JelleZijlstra It is not super-urgent, but I would like to ideally get green light from at least one of you today.

@overload
def group(self, __group: Literal[0] = ...) -> AnyStr: ...
@overload
def group(self, __group: Union[str, int]) -> Optional[AnyStr]: ...
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be sufficient to change this overload and the next to return Any or AnyStr, and keep the first overload the same?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or actually if we make it AnyStr, then the two overloads would have the same return type.

What do you think of @srittau's suggestion to make this overload return Any? Returning AnyStr when it can actually return None is also problematic for mypyc.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changing this to AnyStr allows to merge the two overloads, but I can keep them separate if you prefer.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer Any for now as well. Also, would a mypy plugin make sense here? Because that is something I could have a stab at.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think of @srittau's suggestion to make this overload return Any? Returning AnyStr when it can actually return None is also problematic for mypyc.

I am still not sure. My main motivation for AnyStr is that it was like this for years and didn't cause any troubles.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, would a mypy plugin make sense here? Because that is something I could have a stab at.

How exactly would you like to get more precise type with a plugin? In most cases I have seen one can't statically say whether it can be None.

I'd prefer Any for now as well.

Keeping it AnyStr will allow catching many str/bytes/unicode bugs, especially in view of the fact that a lot of code is now migrated to Python 3. As I said, let's solve the problems as they appear. It was AnyStr for years, and everything was OK.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How exactly would you like to get more precise type with a plugin? In most cases I have seen one can't statically say whether it can be None.

You can analyze the regex to figure out whether the group is optional.

Keeping it AnyStr will allow catching many str/bytes/unicode bugs, especially in view of the fact that a lot of code is now migrated to Python 3. As I said, let's solve the problems as they appear. It was AnyStr for years, and everything was OK.

It did cause some problems:

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It did cause some problems:

These are not problems: first report appeared nine days ago, second is a discussion of possible crash, not actual one. On the other hand, passing something from bytes match groups to functions accepting strings and vice versa is one of the prime causes of str/unicode bugs.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there any additional arguments? If not, I would proceed with this, because current state does cause problems.

Later we can reconsider.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK I'm fine with restoring the previous behavior too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants