-
Notifications
You must be signed in to change notification settings - Fork 380
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
language/go: Add support for //go:build tags #1243
Conversation
49f518e
to
a6e8311
Compare
My advice is to split this PR into smaller ones for easier reviewing:
|
6939f62
to
497dad6
Compare
b5e86ab
to
b982fbc
Compare
7e7bac8
to
69abeda
Compare
90b1ad2
to
ea0b5ac
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@thempatel thanks so much for working on this.
I have several nits as commented. Generally I would recommend moving some of the added, mirror functionality from go/build/constraint
to a new file. fileinfo.go
is approaching 1000 lines status and the diff hunks were quite hard to consume.
Very glad that you were able to refactor the unit tests using the 2 new structs. Could you please also provide 1 simple test cases (which only uses //go:build
and not the old // +build
) in testdata
as integration test for this? The testdata are used in TestGenerateRules
in generate_test.go
FYI.
5f829aa
to
f4c7b3d
Compare
@sluongng PTAL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I only have small nits left.
I think this version is a lot cleaner and easier to digest. Breaking the diff into smaller files was definitely the right way to go.
fileinfo.go
diff is still quite noisy to digest through. But the test passing is additional assurance.
There are small scope creeps here and there with the usage of cmp.Diff but IMO the end result is strictly better.
f4c7b3d
to
2c57ed0
Compare
@sluongng PTAL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When we have
-- collector_linux.go --
//go:build linux && amd64
package cpufreqcounters
import (
"uber.com/inventory"
"uber.com/file"
)
-- collector_other.go --
//go:build !(linux && amd64)
package cpufreqcounters
import (
"uber.com/file"
)
This pull request would lead to huge list of deps
in go_library
like:
deps = select({
"@io_bazel_rules_go//go/platform:aix_ppc64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:android_386": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:android_amd64": [
"//uber.com/file",
"//uber.com/inventory",
],
"@io_bazel_rules_go//go/platform:android_arm": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:android_arm64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:darwin_386": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:darwin_amd64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:darwin_arm": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:darwin_arm64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:dragonfly_amd64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:freebsd_386": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:freebsd_amd64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:freebsd_arm": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:freebsd_arm64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:illumos_amd64": [
"//uber.com/file",
],
"@io_bazel_rules_go//go/platform:linux_amd64": [
"//uber.com/file",
"//uber.com/inventory",
],
"//conditions:default": [],
Can you simplify it to something like:
deps = [
"//uber.com/file",
] + select({
"@io_bazel_rules_go//go/platform:android": [
"//uber.com/inventory",
],
"@io_bazel_rules_go//go/platform:linux": [
"//uber.com/inventory",
],
"//conditions:default": [],
}),
or
deps = select({
"@io_bazel_rules_go//go/platform:android": [
"//uber.com/file",
"//uber.com/inventory",
],
"@io_bazel_rules_go//go/platform:linux": [
"//uber.com/file",
"//uber.com/inventory",
],
"//conditions:default": [
"//uber.com/file",
],
}),
language/go/build_tags.go
Outdated
// rest of the file by a blank line. Each string in the returned slice | ||
// is the trimmed text of a line after a "+build" prefix. | ||
// Based on go/build.Context.shouldBuild. | ||
func readTags(path string) (*buildTags, error) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: According to Uber style guide:
Functions should be sorted in rough call order.
So it's better to put readTags
at the top of this file.
@linzhp I'm somewhat confused by that, does that mean that the existing build tags logic is broken? How does it work today? Is the long list a problem, these are generated files so I would lean toward not introducing scope creep to make the file prettier unless the generated code is causing bugs/issues |
272b85b
to
64af7ea
Compare
Could you help me understand this edge case (for my own edification), my understanding is if a new repo becomes managed by
this makes sense to me!
I am not sure, to me it seems like it would be situational, maybe some existing examples would help bring clarity
In an ideal world I agree, but I think it is unlikely we'll be able to convince the go team within any reasonable timeframe and we have many other things to do. @linzhp PTAL |
Sorry, I am getting swamped by the perf season. Would you mind rebasing on master so it's easier for me to test? |
64af7ea
to
0990abb
Compare
@linzhp rebased and pushed, PTAL |
Some tests are failing |
0990abb
to
64af7ea
Compare
64af7ea
to
f60b725
Compare
@linzhp pushed some old code, apologies. Things look green now |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All tests in Uber passed. Thanks for the contribution.
thanks for the collaboration everyone! |
The |
Can you come up with a PR to fix it? |
I'm sorry to hear that, I will point out that and given that |
Yeah, it happens. Just one of those many cases where you think upgrading something will be a small task and it morphs into a bigger one. |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [bazel_gazelle](https://togithub.com/bazelbuild/bazel-gazelle) | http_archive | minor | `v0.26.0` -> `v0.29.0` | --- ### Release Notes <details> <summary>bazelbuild/bazel-gazelle</summary> ### [`v0.29.0`](https://togithub.com/bazelbuild/bazel-gazelle/releases/tag/v0.29.0) [Compare Source](https://togithub.com/bazelbuild/bazel-gazelle/compare/v0.28.0...v0.29.0) #### What's Changed - bzlmod: Update Publish to BCR app config by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1363](https://togithub.com/bazelbuild/bazel-gazelle/pull/1363) - Fix: Skip default_visibility extension logic if no BUILD.bazel file present by [@​dnathe4th](https://togithub.com/dnathe4th) in [https://github.com/bazelbuild/bazel-gazelle/pull/1364](https://togithub.com/bazelbuild/bazel-gazelle/pull/1364) - fix updateStmt makeslice panic by [@​pcj](https://togithub.com/pcj) in [https://github.com/bazelbuild/bazel-gazelle/pull/1371](https://togithub.com/bazelbuild/bazel-gazelle/pull/1371) - bzlmod: Add missing `strip_prefix` field to `source.template.json` by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1375](https://togithub.com/bazelbuild/bazel-gazelle/pull/1375) - feat: support common test args in `gazelle_generation_test` by [@​cgrindel](https://togithub.com/cgrindel) in [https://github.com/bazelbuild/bazel-gazelle/pull/1377](https://togithub.com/bazelbuild/bazel-gazelle/pull/1377) - Make the new facts pacakge public by [@​linzhp](https://togithub.com/linzhp) in [https://github.com/bazelbuild/bazel-gazelle/pull/1378](https://togithub.com/bazelbuild/bazel-gazelle/pull/1378) - fix: add timeout message for `gazelle_generation_test` by [@​cgrindel](https://togithub.com/cgrindel) in [https://github.com/bazelbuild/bazel-gazelle/pull/1383](https://togithub.com/bazelbuild/bazel-gazelle/pull/1383) - bzlmod: Add missing repository metadata by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1387](https://togithub.com/bazelbuild/bazel-gazelle/pull/1387) - Replace `cfg = "host"` with `cfg = "exec"` by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1395](https://togithub.com/bazelbuild/bazel-gazelle/pull/1395) - upgrade rules_go to 0.37.0 by [@​JamyDev](https://togithub.com/JamyDev) in [https://github.com/bazelbuild/bazel-gazelle/pull/1386](https://togithub.com/bazelbuild/bazel-gazelle/pull/1386) - Fix embed on windows by [@​st3veV](https://togithub.com/st3veV) in [https://github.com/bazelbuild/bazel-gazelle/pull/1361](https://togithub.com/bazelbuild/bazel-gazelle/pull/1361) - Update bazel-skylib to 1.3.0. by [@​benjaminp](https://togithub.com/benjaminp) in [https://github.com/bazelbuild/bazel-gazelle/pull/1367](https://togithub.com/bazelbuild/bazel-gazelle/pull/1367) - Fix Directives anchor by [@​jmthvt](https://togithub.com/jmthvt) in [https://github.com/bazelbuild/bazel-gazelle/pull/1353](https://togithub.com/bazelbuild/bazel-gazelle/pull/1353) - Use `patch` from `@bazel_tools//tools/build_defs/repo` by [@​tyler-french](https://togithub.com/tyler-french) in [https://github.com/bazelbuild/bazel-gazelle/pull/1381](https://togithub.com/bazelbuild/bazel-gazelle/pull/1381) - Add link to BenchSci's rules_nodejs_gazelle extension by [@​ColinHeathman](https://togithub.com/ColinHeathman) in [https://github.com/bazelbuild/bazel-gazelle/pull/1369](https://togithub.com/bazelbuild/bazel-gazelle/pull/1369) - bzlmod: Skip Go modules available as Bazel modules by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1403](https://togithub.com/bazelbuild/bazel-gazelle/pull/1403) - repo: opportunistically populate RemoteCache from go.mod by [@​jayconrod](https://togithub.com/jayconrod) in [https://github.com/bazelbuild/bazel-gazelle/pull/1396](https://togithub.com/bazelbuild/bazel-gazelle/pull/1396) - Fix Gazelle with `--incompatible_disallow_empty_glob` by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1405](https://togithub.com/bazelbuild/bazel-gazelle/pull/1405) - chore: remove experimental warning from bzlmod module by [@​alexeagle](https://togithub.com/alexeagle) in [https://github.com/bazelbuild/bazel-gazelle/pull/1406](https://togithub.com/bazelbuild/bazel-gazelle/pull/1406) - chore: add Swift extension to language list by [@​cgrindel](https://togithub.com/cgrindel) in [https://github.com/bazelbuild/bazel-gazelle/pull/1412](https://togithub.com/bazelbuild/bazel-gazelle/pull/1412) - Update everything for release prep, add releaser tool by [@​dnathe4th](https://togithub.com/dnathe4th) in [https://github.com/bazelbuild/bazel-gazelle/pull/1373](https://togithub.com/bazelbuild/bazel-gazelle/pull/1373) - adding go version and std_package_list to releaser by [@​linzhp](https://togithub.com/linzhp) in [https://github.com/bazelbuild/bazel-gazelle/pull/1415](https://togithub.com/bazelbuild/bazel-gazelle/pull/1415) #### New Contributors - [@​damingerdai](https://togithub.com/damingerdai) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1362](https://togithub.com/bazelbuild/bazel-gazelle/pull/1362) - [@​st3veV](https://togithub.com/st3veV) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1361](https://togithub.com/bazelbuild/bazel-gazelle/pull/1361) - [@​benjaminp](https://togithub.com/benjaminp) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1367](https://togithub.com/bazelbuild/bazel-gazelle/pull/1367) - [@​jmthvt](https://togithub.com/jmthvt) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1353](https://togithub.com/bazelbuild/bazel-gazelle/pull/1353) - [@​ColinHeathman](https://togithub.com/ColinHeathman) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1369](https://togithub.com/bazelbuild/bazel-gazelle/pull/1369) **Full Changelog**: bazel-contrib/bazel-gazelle@v0.28.0...v0.29.0 ### [`v0.28.0`](https://togithub.com/bazelbuild/bazel-gazelle/releases/tag/v0.28.0) [Compare Source](https://togithub.com/bazelbuild/bazel-gazelle/compare/v0.27.0...v0.28.0) #### What's Changed - language/proto: gen_known_imports creates structs instead of function calls by [@​eric-skydio](https://togithub.com/eric-skydio) in [https://github.com/bazelbuild/bazel-gazelle/pull/1333](https://togithub.com/bazelbuild/bazel-gazelle/pull/1333) - Add DoneGeneratingRules language hook by [@​illicitonion](https://togithub.com/illicitonion) in [https://github.com/bazelbuild/bazel-gazelle/pull/1325](https://togithub.com/bazelbuild/bazel-gazelle/pull/1325) - Allow configuring timeout of generation tests by [@​illicitonion](https://togithub.com/illicitonion) in [https://github.com/bazelbuild/bazel-gazelle/pull/1324](https://togithub.com/bazelbuild/bazel-gazelle/pull/1324) - bug: Allow user-specified tags on gazelle rule by [@​Helcaraxan](https://togithub.com/Helcaraxan) in [https://github.com/bazelbuild/bazel-gazelle/pull/1308](https://togithub.com/bazelbuild/bazel-gazelle/pull/1308) - Replace \_get_auth with Bazel's read_user_netrc by [@​linzhp](https://togithub.com/linzhp) in [https://github.com/bazelbuild/bazel-gazelle/pull/1338](https://togithub.com/bazelbuild/bazel-gazelle/pull/1338) - language/go should consider default_visibility set by OtherGen ([#​783](https://togithub.com/bazelbuild/bazel-gazelle/issues/783)) by [@​dnathe4th](https://togithub.com/dnathe4th) in [https://github.com/bazelbuild/bazel-gazelle/pull/1341](https://togithub.com/bazelbuild/bazel-gazelle/pull/1341) - fix: pass `visibility` attribute for `gazelle` macro to resulting `sh_binary` by [@​cgrindel](https://togithub.com/cgrindel) in [https://github.com/bazelbuild/bazel-gazelle/pull/1340](https://togithub.com/bazelbuild/bazel-gazelle/pull/1340) - Add additional bzlmod requirements to allow grpc protobufs to work by [@​shs96c](https://togithub.com/shs96c) in [https://github.com/bazelbuild/bazel-gazelle/pull/1345](https://togithub.com/bazelbuild/bazel-gazelle/pull/1345) - bzlmod: Simplify go_grpc_library support by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1346](https://togithub.com/bazelbuild/bazel-gazelle/pull/1346) - bzlmod: Add support for custom `go_proto_library` compilers by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1348](https://togithub.com/bazelbuild/bazel-gazelle/pull/1348) - Add visibility extension to support recursive default_visibility ([#​783](https://togithub.com/bazelbuild/bazel-gazelle/issues/783)) by [@​dnathe4th](https://togithub.com/dnathe4th) in [https://github.com/bazelbuild/bazel-gazelle/pull/1343](https://togithub.com/bazelbuild/bazel-gazelle/pull/1343) - Make `gazelle_generation_test` respect out suffix when generating golden files by [@​blorente](https://togithub.com/blorente) in [https://github.com/bazelbuild/bazel-gazelle/pull/1352](https://togithub.com/bazelbuild/bazel-gazelle/pull/1352) - Add size argument to `gazelle_generation_test` by [@​charlesoconor](https://togithub.com/charlesoconor) in [https://github.com/bazelbuild/bazel-gazelle/pull/1351](https://togithub.com/bazelbuild/bazel-gazelle/pull/1351) #### New Contributors - [@​eric-skydio](https://togithub.com/eric-skydio) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1333](https://togithub.com/bazelbuild/bazel-gazelle/pull/1333) - [@​dnathe4th](https://togithub.com/dnathe4th) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1341](https://togithub.com/bazelbuild/bazel-gazelle/pull/1341) - [@​cgrindel](https://togithub.com/cgrindel) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1340](https://togithub.com/bazelbuild/bazel-gazelle/pull/1340) - [@​shs96c](https://togithub.com/shs96c) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1345](https://togithub.com/bazelbuild/bazel-gazelle/pull/1345) - [@​blorente](https://togithub.com/blorente) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1352](https://togithub.com/bazelbuild/bazel-gazelle/pull/1352) - [@​charlesoconor](https://togithub.com/charlesoconor) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1351](https://togithub.com/bazelbuild/bazel-gazelle/pull/1351) **Full Changelog**: bazel-contrib/bazel-gazelle@v0.27.0...v0.28.0 ### [`v0.27.0`](https://togithub.com/bazelbuild/bazel-gazelle/releases/tag/v0.27.0) [Compare Source](https://togithub.com/bazelbuild/bazel-gazelle/compare/v0.26.0...v0.27.0) #### What's Changed - Use repo-relative labels everywhere by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1294](https://togithub.com/bazelbuild/bazel-gazelle/pull/1294) - Fix RST URL errors for rules_jvm by [@​qaisjp](https://togithub.com/qaisjp) in [https://github.com/bazelbuild/bazel-gazelle/pull/1296](https://togithub.com/bazelbuild/bazel-gazelle/pull/1296) - bzlmod prototype by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1266](https://togithub.com/bazelbuild/bazel-gazelle/pull/1266) - bzlmod: Do not create a repository with an invalid name by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1304](https://togithub.com/bazelbuild/bazel-gazelle/pull/1304) - language/go: Add support for //go:build tags by [@​thempatel](https://togithub.com/thempatel) in [https://github.com/bazelbuild/bazel-gazelle/pull/1243](https://togithub.com/bazelbuild/bazel-gazelle/pull/1243) - Unwrap `go list -m -json` errors correctly by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1301](https://togithub.com/bazelbuild/bazel-gazelle/pull/1301) - Make one more label repo-relative by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1297](https://togithub.com/bazelbuild/bazel-gazelle/pull/1297) - bzlmod: Add go_deps.from_file by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1300](https://togithub.com/bazelbuild/bazel-gazelle/pull/1300) - language: add BaseLang by [@​sluongng](https://togithub.com/sluongng) in [https://github.com/bazelbuild/bazel-gazelle/pull/1303](https://togithub.com/bazelbuild/bazel-gazelle/pull/1303) - Allow adding arguments to Rules by [@​illicitonion](https://togithub.com/illicitonion) in [https://github.com/bazelbuild/bazel-gazelle/pull/1310](https://togithub.com/bazelbuild/bazel-gazelle/pull/1310) - Register and parse flags before calling Kinds/Loads by [@​illicitonion](https://togithub.com/illicitonion) in [https://github.com/bazelbuild/bazel-gazelle/pull/1318](https://togithub.com/bazelbuild/bazel-gazelle/pull/1318) - SortMacro() should also sort the Loads by [@​tyler-french](https://togithub.com/tyler-french) in [https://github.com/bazelbuild/bazel-gazelle/pull/1321](https://togithub.com/bazelbuild/bazel-gazelle/pull/1321) - bzlmod: Fix canonical label literal after Bazel change by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1322](https://togithub.com/bazelbuild/bazel-gazelle/pull/1322) - update-repos: don't add repositories declared with gazelle:repository… by [@​tyler-french](https://togithub.com/tyler-french) in [https://github.com/bazelbuild/bazel-gazelle/pull/1326](https://togithub.com/bazelbuild/bazel-gazelle/pull/1326) - Look in call args for loadable symbols by [@​illicitonion](https://togithub.com/illicitonion) in [https://github.com/bazelbuild/bazel-gazelle/pull/1317](https://togithub.com/bazelbuild/bazel-gazelle/pull/1317) - SortMacro() should also sort rules by Kind() by [@​tyler-french](https://togithub.com/tyler-french) in [https://github.com/bazelbuild/bazel-gazelle/pull/1327](https://togithub.com/bazelbuild/bazel-gazelle/pull/1327) - bzlmod: Fix missing .format in go_deps by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1330](https://togithub.com/bazelbuild/bazel-gazelle/pull/1330) - bzlmod: Depend on rules_proto by [@​fmeum](https://togithub.com/fmeum) in [https://github.com/bazelbuild/bazel-gazelle/pull/1331](https://togithub.com/bazelbuild/bazel-gazelle/pull/1331) #### New Contributors - [@​qaisjp](https://togithub.com/qaisjp) made their first contribution in [https://github.com/bazelbuild/bazel-gazelle/pull/1296](https://togithub.com/bazelbuild/bazel-gazelle/pull/1296) **Full Changelog**: bazel-contrib/bazel-gazelle@v0.26.0...v0.27.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/kreempuff/rules_unreal_engine). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xMTcuMSIsInVwZGF0ZWRJblZlciI6IjM0LjExNy4xIn0=-->
What type of PR is this?
Feature
What package or component does this PR mostly affect?
language/go
What does this PR do? Why is it needed?
Adds support for the new
//go:build
build tags syntax introduced ingo1.17
Which issues(s) does this PR fix?
Fixes #1099
Other notes for review