[L] Change in code/re2[main]: add type stubs and mypy.ini

3 views
Skip to first unread message

Daniel McClanahan (Gerrit)

unread,
Jun 12, 2024, 11:46:52 PMJun 12
to Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 1 comment

Patchset-level comments
File-level comment, Patchset 4 (Latest):
Daniel McClanahan . resolved

This change doesn't add anything to the bazel build yet, but I was thinking that getting type stubs to work at all would establish a nice ground truth before getting them to work in bazel.

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 4
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Thu, 13 Jun 2024 03:46:49 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Paul Wankadia (Gerrit)

unread,
Jun 13, 2024, 3:38:32 PMJun 13
to Daniel McClanahan, Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Daniel McClanahan

Paul Wankadia added 13 comments

Patchset-level comments
Daniel McClanahan . resolved

This change doesn't add anything to the bazel build yet, but I was thinking that getting type stubs to work at all would establish a nice ground truth before getting them to work in bazel.

Paul Wankadia

Quoting https://github.com/google/re2/issues/496#issuecomment-2166522270:

If the Bazel community ever decides to make Python type checkers Just Workâ„¢, we can revisit this then. In the meantime, I have no desire to (co-)author and subsequently maintain whatever Starlark would be needed, so please don't spend any (more!) time worrying about it. ;)

Paul Wankadia . resolved

Thank you so much for doing this! I have left a first round of comments. I haven't actually looked at the `.pyi` files yet.

File .github/workflows/python.yml
Paul Wankadia . unresolved

Please revert `python.yml` and, instead, replace the TODO in `ci-bazel.yml` with something like the following:

```
- name: Test stubs
run: |
DIR=$(mktemp -d)
cp bazel-bin/python/re2_test.runfiles/_main/python/* "${DIR}"
cp python/*.pyi python/mypy.ini "${DIR}"
cd "${DIR}"
mypy .
shell: bash
```

`python.yml` is a release workflow, not a CI workflow. Moreover, testing the wheels is important for catching any platform-specific breakage before publishing to PyPI, but the stubs aren't going to break like that. (Well, I certainly hope they won't.)

File python/mypy.ini
Line 2, Patchset 4 (Latest):warn_return_any = True
warn_unused_configs = True
Paul Wankadia . unresolved

Can we just set `strict` (or a similar knob) to enable everything and then, if there are problems, squelch them selectively and leave comments to explain what still needs to be fixed?

Line 4, Patchset 4 (Latest):exclude = (?x)(
setup\.py
)
Paul Wankadia . unresolved

Not needed?

Line 9, Patchset 4 (Latest):disallow_untyped_defs = True
Paul Wankadia . unresolved

I would prefer not to do this; see the comment in `re2_test.py`.

Line 12, Patchset 4 (Latest):ignore_missing_imports = True
Paul Wankadia . unresolved

`ci-bazel.yml` now installs `absl-py` as well as `mypy`, so this should hopefully not be needed.

File python/re2_test.py
Paul Wankadia . unresolved

Do we need to add type annotations throughout this file in order to get mypy to do anything useful for us? There seems to be a lot of noise (almost entirely around the `test_*()` methods) for what feels like very little value.

Line 6, Patchset 4 (Latest):from __future__ import annotations
Paul Wankadia . unresolved

Not needed?

Line 170, Patchset 4 (Latest): assert match is not None
Paul Wankadia . unresolved

Please use `self.assertIsNotNone(…)` here and below.

File python/setup.py
Line 114, Patchset 4 (Latest):with open('re2.py', 'r') as file:
re2_contents = relativize_native_import(file.read())
with open('re2/__init__.py', 'x') as file:
file.write(re2_contents)
Paul Wankadia . unresolved
```suggestion
with open('re2.py', 'r') as file:
contents = relativize_native_import(file.read())
with open('re2/__init__.py', 'x') as file:
file.write(contents)
```
Line 119, Patchset 4 (Latest):with open('re2.pyi', 'r') as file:
re2i_contents = relativize_native_import(file.read())
with open('re2/__init__.pyi', 'w') as file:
file.write(re2i_contents)
Paul Wankadia . unresolved
```suggestion
with open('re2.pyi', 'r') as file:
contents = relativize_native_import(file.read())
with open('re2/__init__.pyi', 'x') as file:
file.write(contents)
```
Line 124, Patchset 4 (Latest):shutil.copyfile('_re2.pyi', 're2/_re2.pyi')
Paul Wankadia . unresolved

```suggestion
shutil.copyfile('_re2.pyi', 're2/_re2.pyi')

with open('re2/py.typed', 'x') as file:
pass
```
Open in Gerrit

Related details

Attention is currently required from:
  • Daniel McClanahan
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 4
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Comment-Date: Thu, 13 Jun 2024 19:38:25 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Daniel McClanahan <danieldm...@gmail.com>
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:16:34 AMJun 14
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 6 comments

File .github/workflows/python.yml
Paul Wankadia . unresolved

Please revert `python.yml` and, instead, replace the TODO in `ci-bazel.yml` with something like the following:

```
- name: Test stubs
run: |
DIR=$(mktemp -d)
cp bazel-bin/python/re2_test.runfiles/_main/python/* "${DIR}"
cp python/*.pyi python/mypy.ini "${DIR}"
cd "${DIR}"
mypy .
shell: bash
```

`python.yml` is a release workflow, not a CI workflow. Moreover, testing the wheels is important for catching any platform-specific breakage before publishing to PyPI, but the stubs aren't going to break like that. (Well, I certainly hope they won't.)

Daniel McClanahan

So the reason I wanted to test stubs like that (in the separate dir, along with `re2_test.py`, with the wheel) was to ensure that the specific little magic we've added in `setup.py` (renaming the `.pyi` files and regex replacing to `from . import _re2`) would correctly "import" with mypy when users consume the output wheel.

I totally agree that there's no platform-specific testing to perform here, but in case we decide e.g. to (heaven forfend) add further `.pyi` files in the future (which e.g. may also need renaming and regex replacing imports), I *would* like to have a single test (not platform-specific!) which imports the wheel, and then runs mypy.

What you've written out here is a correct invocation of mypy that corresponds to the way I've been testing locally, but I *also* want to make sure our types work in the mypy context when imported from the wheel.

This is very long-winded (sorry!), but what I'll do is add this "Test stubs" phase you've helpfully written for me, and then I'll try to add a phase that executes mypy when importing types from the wheel (in the CI and not the release workflow).

File python/mypy.ini
Line 2, Patchset 4 (Latest):warn_return_any = True
warn_unused_configs = True
Paul Wankadia . unresolved

Can we just set `strict` (or a similar knob) to enable everything and then, if there are problems, squelch them selectively and leave comments to explain what still needs to be fixed?

Daniel McClanahan

Working on this! I do not believe there is a `strict` option and instead we need to turn on a million flags \^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^ https://mypy.readthedocs.io/en/stable/config_file.html I will research further!

Line 4, Patchset 4 (Latest):exclude = (?x)(
setup\.py
)
Paul Wankadia . unresolved

Not needed?

Daniel McClanahan

This is definitely necessary when running `mypy` locally. I also have an additional exclusion for that case.

Line 12, Patchset 4 (Latest):ignore_missing_imports = True
Paul Wankadia . unresolved

`ci-bazel.yml` now installs `absl-py` as well as `mypy`, so this should hopefully not be needed.

Daniel McClanahan

This *was* necessary when I ran `mypy` locally before, but appears to no longer be necessary! Fixed!

File python/re2_test.py
Line 6, Patchset 4 (Latest):from __future__ import annotations
Paul Wankadia . unresolved

Not needed?

Daniel McClanahan

This little trinket is necessary to get some behavior we probably want (see https://mypy.readthedocs.io/en/stable/runtime_troubles.html and https://peps.python.org/pep-0563/#enabling-the-future-behavior-in-python-3-7), for pythons under 3.12. However, it seems to only be necessary for `.py` files, so I will remove it from the `.pyi`!

Line 170, Patchset 4 (Latest): assert match is not None
Paul Wankadia . unresolved

Please use `self.assertIsNotNone(…)` here and below.

Daniel McClanahan

You're going to hate this, but I'm pretty confident this is literally necessary for mypy, which is able to recognize `x is not None`, but is not able to infer that `self.assertIsNotNone(x)` means `x` is not `None`. With `self.assertIsNotNone(match)`, we get:

```
re2_test.py:172: error: Item "None" of "Match[str] | None" has no attribute "span"  [union-attr]
re2_test.py:172: error: Item "None" of "Match[bytes] | None" has no attribute "span"  [union-attr]
re2_test.py:172: error: Item "None" of "Match[str] | None" has no attribute "re"  [union-attr]
re2_test.py:172: error: Item "None" of "Match[bytes] | None" has no attribute "re"  [union-attr]

```

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 4
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 04:16:28 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Paul Wankadia <jun...@google.com>
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:18:18 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #5 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 5
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:19:41 AMJun 14
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 3 comments

File python/mypy.ini
Line 4, Patchset 4:exclude = (?x)(
setup\.py
)
Paul Wankadia . resolved

Not needed?

Daniel McClanahan

This is definitely necessary when running `mypy` locally. I also have an additional exclusion for that case.

Daniel McClanahan

Done

Line 12, Patchset 4:ignore_missing_imports = True
Paul Wankadia . resolved

`ci-bazel.yml` now installs `absl-py` as well as `mypy`, so this should hopefully not be needed.

Daniel McClanahan

This *was* necessary when I ran `mypy` locally before, but appears to no longer be necessary! Fixed!

Daniel McClanahan

Done

File python/re2_test.py
Line 6, Patchset 4:from __future__ import annotations
Paul Wankadia . resolved

Not needed?

Daniel McClanahan

This little trinket is necessary to get some behavior we probably want (see https://mypy.readthedocs.io/en/stable/runtime_troubles.html and https://peps.python.org/pep-0563/#enabling-the-future-behavior-in-python-3-7), for pythons under 3.12. However, it seems to only be necessary for `.py` files, so I will remove it from the `.pyi`!

Daniel McClanahan

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 5
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 04:19:38 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Daniel McClanahan <danieldm...@gmail.com>
Comment-In-Reply-To: Paul Wankadia <jun...@google.com>
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:44:55 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #6 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 6
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:51:41 AMJun 14
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 1 comment

File python/re2_test.py
Paul Wankadia . unresolved

Do we need to add type annotations throughout this file in order to get mypy to do anything useful for us? There seems to be a lot of noise (almost entirely around the `test_*()` methods) for what feels like very little value.

Daniel McClanahan

It looks like there is a [`check_untyped_defs`](https://mypy.readthedocs.io/en/stable/config_file.html#confval-check_untyped_defs) field which should allow us to avoid the noise here. I'm going to try it now.

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 6
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 04:51:39 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Paul Wankadia <jun...@google.com>
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:52:37 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #7 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 7
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:55:01 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #8 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 8
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:55:39 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #9 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 9
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 12:56:02 AMJun 14
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 3 comments

File python/setup.py
Line 114, Patchset 4:with open('re2.py', 'r') as file:

re2_contents = relativize_native_import(file.read())
with open('re2/__init__.py', 'x') as file:
file.write(re2_contents)
Paul Wankadia . resolved
```suggestion
with open('re2.py', 'r') as file:
contents = relativize_native_import(file.read())
with open('re2/__init__.py', 'x') as file:
file.write(contents)
```
Daniel McClanahan

Done

Line 119, Patchset 4:with open('re2.pyi', 'r') as file:

re2i_contents = relativize_native_import(file.read())
with open('re2/__init__.pyi', 'w') as file:
file.write(re2i_contents)
Paul Wankadia . resolved
```suggestion
with open('re2.pyi', 'r') as file:
contents = relativize_native_import(file.read())
with open('re2/__init__.pyi', 'x') as file:
file.write(contents)
```
Daniel McClanahan

Done

Line 124, Patchset 4:shutil.copyfile('_re2.pyi', 're2/_re2.pyi')
Paul Wankadia . resolved

```suggestion


shutil.copyfile('_re2.pyi', 're2/_re2.pyi')

with open('re2/py.typed', 'x') as file:
pass
```
Daniel McClanahan

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 7
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 04:56:00 +0000
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 1:00:12 AMJun 14
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 2 comments

File .github/workflows/python.yml
File-level comment, Patchset 4:
Paul Wankadia . resolved

Please revert `python.yml` and, instead, replace the TODO in `ci-bazel.yml` with something like the following:

```
- name: Test stubs
run: |
DIR=$(mktemp -d)
cp bazel-bin/python/re2_test.runfiles/_main/python/* "${DIR}"
cp python/*.pyi python/mypy.ini "${DIR}"
cd "${DIR}"
mypy .
shell: bash
```

`python.yml` is a release workflow, not a CI workflow. Moreover, testing the wheels is important for catching any platform-specific breakage before publishing to PyPI, but the stubs aren't going to break like that. (Well, I certainly hope they won't.)

Daniel McClanahan

So the reason I wanted to test stubs like that (in the separate dir, along with `re2_test.py`, with the wheel) was to ensure that the specific little magic we've added in `setup.py` (renaming the `.pyi` files and regex replacing to `from . import _re2`) would correctly "import" with mypy when users consume the output wheel.

I totally agree that there's no platform-specific testing to perform here, but in case we decide e.g. to (heaven forfend) add further `.pyi` files in the future (which e.g. may also need renaming and regex replacing imports), I *would* like to have a single test (not platform-specific!) which imports the wheel, and then runs mypy.

What you've written out here is a correct invocation of mypy that corresponds to the way I've been testing locally, but I *also* want to make sure our types work in the mypy context when imported from the wheel.

This is very long-winded (sorry!), but what I'll do is add this "Test stubs" phase you've helpfully written for me, and then I'll try to add a phase that executes mypy when importing types from the wheel (in the CI and not the release workflow).

Daniel McClanahan

Done

File python/mypy.ini
Line 2, Patchset 4:warn_return_any = True
warn_unused_configs = True
Paul Wankadia . unresolved

Can we just set `strict` (or a similar knob) to enable everything and then, if there are problems, squelch them selectively and leave comments to explain what still needs to be fixed?

Daniel McClanahan

Working on this! I do not believe there is a `strict` option and instead we need to turn on a million flags \^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^ https://mypy.readthedocs.io/en/stable/config_file.html I will research further!

Daniel McClanahan

.........just found the literal `strict` knob. Sorry! Will do!

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 9
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 05:00:08 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 1:11:07 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #10 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 10
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 1:16:12 AMJun 14
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 5 comments

Patchset-level comments
File-level comment, Patchset 9:
Daniel McClanahan . unresolved

I believe I have figured out how to get some of the type checking to run, although we *won't* get as deep coverage as we would if we painstakingly added type annotations. As maintainer, I absolutely believe you are within your rights to reject the addition `-> None` to every method. However, I want to make it clear that *should* we ever extend the API and its types, we *may* introduce some errors, which might be caught if we added `-> None` to literally every test method in `re2_test.py` as in the first iteration of this change. However, since the re2 python API is explicitly *not* something that is likely to change in the future, I think we are probably safe to avoid that. But I am pretty confident that we *are* missing some "test coverage" of our type annotations by not annotating most of `re2_test.py`. I am totally fine with that if you are.

File python/mypy.ini
Line 2, Patchset 4:warn_return_any = True
warn_unused_configs = True
Paul Wankadia . resolved

Can we just set `strict` (or a similar knob) to enable everything and then, if there are problems, squelch them selectively and leave comments to explain what still needs to be fixed?

Daniel McClanahan

Working on this! I do not believe there is a `strict` option and instead we need to turn on a million flags \^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^_\^ https://mypy.readthedocs.io/en/stable/config_file.html I will research further!

Daniel McClanahan

.........just found the literal `strict` knob. Sorry! Will do!

Daniel McClanahan

Done

Line 9, Patchset 4:disallow_untyped_defs = True
Paul Wankadia . resolved

I would prefer not to do this; see the comment in `re2_test.py`.

Daniel McClanahan

Done

File python/re2_test.py
File-level comment, Patchset 4:
Paul Wankadia . resolved

Do we need to add type annotations throughout this file in order to get mypy to do anything useful for us? There seems to be a lot of noise (almost entirely around the `test_*()` methods) for what feels like very little value.

Daniel McClanahan

It looks like there is a [`check_untyped_defs`](https://mypy.readthedocs.io/en/stable/config_file.html#confval-check_untyped_defs) field which should allow us to avoid the noise here. I'm going to try it now.

Daniel McClanahan

Done

Line 170, Patchset 4: assert match is not None
Paul Wankadia . resolved

Please use `self.assertIsNotNone(…)` here and below.

Daniel McClanahan

You're going to hate this, but I'm pretty confident this is literally necessary for mypy, which is able to recognize `x is not None`, but is not able to infer that `self.assertIsNotNone(x)` means `x` is not `None`. With `self.assertIsNotNone(match)`, we get:

```
re2_test.py:172: error: Item "None" of "Match[str] | None" has no attribute "span"  [union-attr]
re2_test.py:172: error: Item "None" of "Match[bytes] | None" has no attribute "span"  [union-attr]
re2_test.py:172: error: Item "None" of "Match[str] | None" has no attribute "re"  [union-attr]
re2_test.py:172: error: Item "None" of "Match[bytes] | None" has no attribute "re"  [union-attr]

```

Daniel McClanahan

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 9
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 05:16:09 +0000
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 1:22:40 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #11 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 11
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 1:39:52 AMJun 14
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #12 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 12
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 14, 2024, 1:42:19 AMJun 14
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 1 comment

File python/setup.py
Line 112, Patchset 12 (Latest):def generated_package(name):
Daniel McClanahan . unresolved

I moved the `os.makedirs('re2')` into a contextmanager in order to clarify some of the hijinx we're performing. I personally think this makes the control flow much more clear, but am totally open to reverting it!

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 12
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Fri, 14 Jun 2024 05:42:15 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 15, 2024, 1:42:40 AMJun 15
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #13 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 13
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 15, 2024, 1:44:04 AMJun 15
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 1 comment

File python/setup.py
Line 112, Patchset 12:def generated_package(name):
Daniel McClanahan . unresolved

I moved the `os.makedirs('re2')` into a contextmanager in order to clarify some of the hijinx we're performing. I personally think this makes the control flow much more clear, but am totally open to reverting it!

Daniel McClanahan

Moved `shutil.rmtree(name)` out of the `finally` block to avoid delyeeting upon failure!

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 13
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Sat, 15 Jun 2024 05:44:01 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Daniel McClanahan <danieldm...@gmail.com>
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 15, 2024, 1:48:28 AMJun 15
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #14 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 14
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 15, 2024, 1:55:34 AMJun 15
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 1 comment

File .github/workflows/python.yml
File-level comment, Patchset 4:
Paul Wankadia . unresolved

Please revert `python.yml` and, instead, replace the TODO in `ci-bazel.yml` with something like the following:

```
- name: Test stubs
run: |
DIR=$(mktemp -d)
cp bazel-bin/python/re2_test.runfiles/_main/python/* "${DIR}"
cp python/*.pyi python/mypy.ini "${DIR}"
cd "${DIR}"
mypy .
shell: bash
```

`python.yml` is a release workflow, not a CI workflow. Moreover, testing the wheels is important for catching any platform-specific breakage before publishing to PyPI, but the stubs aren't going to break like that. (Well, I certainly hope they won't.)

Daniel McClanahan

So the reason I wanted to test stubs like that (in the separate dir, along with `re2_test.py`, with the wheel) was to ensure that the specific little magic we've added in `setup.py` (renaming the `.pyi` files and regex replacing to `from . import _re2`) would correctly "import" with mypy when users consume the output wheel.

I totally agree that there's no platform-specific testing to perform here, but in case we decide e.g. to (heaven forfend) add further `.pyi` files in the future (which e.g. may also need renaming and regex replacing imports), I *would* like to have a single test (not platform-specific!) which imports the wheel, and then runs mypy.

What you've written out here is a correct invocation of mypy that corresponds to the way I've been testing locally, but I *also* want to make sure our types work in the mypy context when imported from the wheel.

This is very long-winded (sorry!), but what I'll do is add this "Test stubs" phase you've helpfully written for me, and then I'll try to add a phase that executes mypy when importing types from the wheel (in the CI and not the release workflow).

Daniel McClanahan

Done

Daniel McClanahan

Per our offline discussion regarding the desire to avoid building wheels in CI, I have unreverted my changes here, and we now test stubs in every element of all our publish matrices.

I did consider trying to do it just once in the actual publish step, but I didn't want to actually `pip install` any specific wheel before publishing because I felt scared of inducing weird errors, and after publishing is no good. If running `mypy` in every single wheel-building shard takes up a nontrivial amount of time (doubtful), we could perhaps create a venv? We could also try adding one of the wheels to `MYPYPATH` (I think that's how it works) instead of installing.

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 14
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Sat, 15 Jun 2024 05:55:31 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Daniel McClanahan <danieldm...@gmail.com>
Comment-In-Reply-To: Paul Wankadia <jun...@google.com>
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 27, 2024, 3:50:11 PM (5 days ago) Jun 27
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #15 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 15
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 27, 2024, 3:50:32 PM (5 days ago) Jun 27
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 1 comment

File python/setup.py
Line 112, Patchset 12:def generated_package(name):
Daniel McClanahan . resolved

I moved the `os.makedirs('re2')` into a contextmanager in order to clarify some of the hijinx we're performing. I personally think this makes the control flow much more clear, but am totally open to reverting it!

Daniel McClanahan

Moved `shutil.rmtree(name)` out of the `finally` block to avoid delyeeting upon failure!

Daniel McClanahan

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 15
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Thu, 27 Jun 2024 19:50:27 +0000
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 27, 2024, 3:52:40 PM (5 days ago) Jun 27
to re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan uploaded new patchset

Daniel McClanahan uploaded patch set #16 to this change.
Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 16
unsatisfied_requirement
open
diffy

Daniel McClanahan (Gerrit)

unread,
Jun 27, 2024, 3:52:46 PM (5 days ago) Jun 27
to Alex Chernyakhovsky, Perry Lorier, Paul Wankadia, re2...@googlegroups.com
Attention needed from Paul Wankadia

Daniel McClanahan added 1 comment

File .github/workflows/python.yml
File-level comment, Patchset 4:
Paul Wankadia . resolved

Please revert `python.yml` and, instead, replace the TODO in `ci-bazel.yml` with something like the following:

```
- name: Test stubs
run: |
DIR=$(mktemp -d)
cp bazel-bin/python/re2_test.runfiles/_main/python/* "${DIR}"
cp python/*.pyi python/mypy.ini "${DIR}"
cd "${DIR}"
mypy .
shell: bash
```

`python.yml` is a release workflow, not a CI workflow. Moreover, testing the wheels is important for catching any platform-specific breakage before publishing to PyPI, but the stubs aren't going to break like that. (Well, I certainly hope they won't.)

Daniel McClanahan

So the reason I wanted to test stubs like that (in the separate dir, along with `re2_test.py`, with the wheel) was to ensure that the specific little magic we've added in `setup.py` (renaming the `.pyi` files and regex replacing to `from . import _re2`) would correctly "import" with mypy when users consume the output wheel.

I totally agree that there's no platform-specific testing to perform here, but in case we decide e.g. to (heaven forfend) add further `.pyi` files in the future (which e.g. may also need renaming and regex replacing imports), I *would* like to have a single test (not platform-specific!) which imports the wheel, and then runs mypy.

What you've written out here is a correct invocation of mypy that corresponds to the way I've been testing locally, but I *also* want to make sure our types work in the mypy context when imported from the wheel.

This is very long-winded (sorry!), but what I'll do is add this "Test stubs" phase you've helpfully written for me, and then I'll try to add a phase that executes mypy when importing types from the wheel (in the CI and not the release workflow).

Daniel McClanahan

Done

Daniel McClanahan

Per our offline discussion regarding the desire to avoid building wheels in CI, I have unreverted my changes here, and we now test stubs in every element of all our publish matrices.

I did consider trying to do it just once in the actual publish step, but I didn't want to actually `pip install` any specific wheel before publishing because I felt scared of inducing weird errors, and after publishing is no good. If running `mypy` in every single wheel-building shard takes up a nontrivial amount of time (doubtful), we could perhaps create a venv? We could also try adding one of the wheels to `MYPYPATH` (I think that's how it works) instead of installing.

Daniel McClanahan

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Paul Wankadia
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: re2
Gerrit-Branch: main
Gerrit-Change-Id: I07aa77f327c658db7022a21cab19fbc334fcdd88
Gerrit-Change-Number: 63310
Gerrit-PatchSet: 15
Gerrit-Owner: Daniel McClanahan <danieldm...@gmail.com>
Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
Gerrit-CC: Alex Chernyakhovsky <ache...@google.com>
Gerrit-CC: Perry Lorier <per...@google.com>
Gerrit-Attention: Paul Wankadia <jun...@google.com>
Gerrit-Comment-Date: Thu, 27 Jun 2024 19:52:43 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Daniel McClanahan <danieldm...@gmail.com>
Comment-In-Reply-To: Paul Wankadia <jun...@google.com>
unsatisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages