Skip to content

Conversation

@norkunas
Copy link
Member

@norkunas norkunas commented Dec 12, 2025

Summary by CodeRabbit

  • Chores

    • Updated editor/formatting rules with file-type exceptions.
    • Migrated service/configuration files to a new format and moved profiling setup accordingly.
    • Adjusted package test invocation and added a deprecation baseline entry.
    • Improved geocode command help text.
  • Tests

    • Removed an obsolete functional test and its associated test configuration.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Dec 12, 2025

Walkthrough

Migrates Symfony DI configs from YAML to PHP (adds config/services.php and config/profiling.php, removes corresponding YAML), updates .editorconfig rules, removes an XML test config and its test, adjusts composer.json test script and deprecation baseline, replaces YamlFileLoader with PhpFileLoader in the DI extension, and corrects GeocodeCommand attribute/help.

Changes

Cohort / File(s) Change Summary
Editor configuration
\.editorconfig
Narrowed YAML pattern to .github/**/*.{yml,yaml} and kept indent_size = 2 for that pattern; added [*.{yml,yaml}] with trim_trailing_whitespace = false; added [**.md] to unset indent settings; added [*.json] with insert_final_newline = false; added [*.{neon,neon.dist}] with indent_style = tab.
Service configuration — added PHP
config/services.php, config/profiling.php
Added PHP DI config: registers dumper services (GeoArray, GeoJson, Gpx, Kml, Wkb, Wkt) and makes Dumper implementations public; loads provider factories from ProviderFactory\ with autowire/autoconfigure; registers ProviderAggregator, FakeIpPlugin (constructor args), GeocodeCommand (console tag), AddressValidator (validator tag); registers GeocoderDataCollector with data_collector tag and template.
Service configuration — removed YAML
config/services.yml, config/profiling.yml
Removed previous YAML service definitions for dumpers, provider factories, ProviderAggregator, FakeIpPlugin, GeocodeCommand, AddressValidator, BC aliases and the profiling GeocoderDataCollector entry.
DI loader update
src/DependencyInjection/BazingaGeocoderExtension.php
Replaced YamlFileLoader with PhpFileLoader and switched loading to services.php / profiling.php (profiling still conditionally loaded).
Tests / test config removal
tests/Functional/BundleInitializationTest.php, tests/Functional/config/service_plugin.xml
Removed test method testBundleWithPluginXml() and deleted the XML DI test config (service_plugin.xml) that defined a logger plugin and enabled profiling for that test.
Composer & tests baseline
composer.json, tests/baseline-ignore
Removed conflict for geocoder-php/nominatim-provider; updated test script to prefix PHPUnit with SYMFONY_DEPRECATIONS_HELPER=ignoreFile='./tests/baseline-ignore'; added a deprecation line for Nyholm PSR-7 factory in tests/baseline-ignore.
Command attribute/help update
src/Command/GeocodeCommand.php
Adjusted AsCommand attribute/help text to "an IP address" (formatting changed); no behavior changes.

Sequence Diagram(s)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Review focus:
    • Ensure PHP service configs preserve visibility, tags, autowiring/autoconfigure, and any aliases removed from YAML.
    • Confirm profiling conditional and template/tag metadata are identical after switch.
    • Verify ProviderFactory loading (namespace/path) matches previous behavior.
    • Check removed test and XML fixture don't leave uncovered behavior.

Poem

🐇 I hopped from YAML into PHP tonight,
Services stacked neatly, everything in sight.
Dumpers and collectors all lined in a row,
A plugin waved softly — then off I go. 🥕

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and accurately summarizes the main change: converting service definitions from YAML format to PHP format, which is the primary objective of this pull request.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0887847 and f8635ce.

📒 Files selected for processing (11)
  • .editorconfig (1 hunks)
  • composer.json (1 hunks)
  • config/profiling.php (1 hunks)
  • config/profiling.yml (0 hunks)
  • config/services.php (1 hunks)
  • config/services.yml (0 hunks)
  • src/Command/GeocodeCommand.php (1 hunks)
  • src/DependencyInjection/BazingaGeocoderExtension.php (2 hunks)
  • tests/Functional/BundleInitializationTest.php (0 hunks)
  • tests/Functional/config/service_plugin.xml (0 hunks)
  • tests/baseline-ignore (1 hunks)
💤 Files with no reviewable changes (4)
  • tests/Functional/BundleInitializationTest.php
  • config/services.yml
  • config/profiling.yml
  • tests/Functional/config/service_plugin.xml
🚧 Files skipped from review as they are similar to previous changes (6)
  • .editorconfig
  • config/profiling.php
  • tests/baseline-ignore
  • src/DependencyInjection/BazingaGeocoderExtension.php
  • config/services.php
  • src/Command/GeocodeCommand.php

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/DependencyInjection/BazingaGeocoderExtension.php (1)

34-58: Critical: Symfony 5.4 incompatibility with ContainerConfigurator config pattern.

The config/services.php uses ContainerConfigurator callback style (return static function (ContainerConfigurator $container) { ... }), which is a Symfony 6.1+ feature. However, composer.json requires symfony/framework-bundle": "^5.4 || ^6.4 || ^7.0", meaning Symfony 5.4 is supported. PhpFileLoader in Symfony 5.4 cannot properly process this configuration pattern, breaking the bundle for all 5.4 users.

Either bump the minimum Symfony version to ^6.4 (removing 5.4 support) or provide a YAML-based config file for 5.4 compatibility.

🧹 Nitpick comments (2)
config/services.php (1)

21-31: Avoid double-tagging dumpers (and confirm whether “public dumpers” is still required).
Right now dumpers get tagged via instanceof(Dumper::class) here and via registerForAutoconfiguration(Dumper::class) in src/DependencyInjection/BazingaGeocoderExtension.php (Line 75-76 in provided snippet). Consider keeping only one mechanism to prevent accidental duplicate tags and to keep “public service” surface minimal.

 return static function (ContainerConfigurator $container) {
     $services = $container->services();
-    $services->instanceof(Dumper::class)
-        ->tag('bazinga_geocoder.dumper')
-        ->public();
+    // Dumpers are tagged via BazingaGeocoderExtension::registerForAutoconfiguration(Dumper::class).
+    // If dumpers must be public for BC, keep `->public()` but avoid duplicating the tag.
+    $services->instanceof(Dumper::class)
+        ->public();
.editorconfig (1)

11-16: Reconsider trim_trailing_whitespace = false for all YAML files. The global rule applies to 40+ YAML configuration files across the test suite with no apparent need for trailing whitespace preservation. This can preserve accidental trailing spaces and create noisy diffs. If the intent is to preserve whitespace only for specific GitHub workflow patterns, scope it to .github/**/*.{yml,yaml} instead, or remove it entirely if there's no documented use case.

-[*.{yml,yaml}]
-trim_trailing_whitespace = false
+[.github/**/*.{yml,yaml}]
+trim_trailing_whitespace = false
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7e9948b and 492e03c.

📒 Files selected for processing (8)
  • .editorconfig (1 hunks)
  • config/profiling.php (1 hunks)
  • config/profiling.yml (0 hunks)
  • config/services.php (1 hunks)
  • config/services.yml (0 hunks)
  • src/DependencyInjection/BazingaGeocoderExtension.php (2 hunks)
  • tests/Functional/BundleInitializationTest.php (0 hunks)
  • tests/Functional/config/service_plugin.xml (0 hunks)
💤 Files with no reviewable changes (4)
  • tests/Functional/BundleInitializationTest.php
  • config/profiling.yml
  • tests/Functional/config/service_plugin.xml
  • config/services.yml
🧰 Additional context used
🧬 Code graph analysis (2)
config/profiling.php (1)
src/DataCollector/GeocoderDataCollector.php (1)
  • GeocoderDataCollector (24-116)
config/services.php (3)
src/Plugin/FakeIpPlugin.php (1)
  • FakeIpPlugin (27-71)
src/Validator/Constraint/AddressValidator.php (1)
  • AddressValidator (26-81)
src/DependencyInjection/BazingaGeocoderExtension.php (1)
  • load (47-77)
🔇 Additional comments (1)
config/profiling.php (1)

12-14: Verify GeocoderDataCollector visibility requirements for your Symfony baseline.
Some Symfony versions/flows are fine with private data collectors; others (or custom tooling) may expect it to be public. If anything fetches it directly (vs via tag processing), add ->public().

     $services->set(GeocoderDataCollector::class)
+        // Add if required by your Symfony version / tooling:
+        // ->public()
         ->tag('data_collector', ['template' => '@BazingaGeocoder/Collector/geocoder.html.twig', 'id' => 'geocoder']);

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (2)
config/services.php (2)

39-41: Prevent FakeIpPlugin from ever receiving a null replacement when enabled.

This matches the earlier review note: with current defaults (->args([null, null, false])) + config defaults, it’s possible to end up calling withText(null) at runtime if fake_ip.enabled=true, fake_ip.use_faker=false, and fake_ip.ip is unset. Add config validation in src/DependencyInjection/BazingaGeocoderExtension.php to reject that state.


46-47: Fix command description grammar (“an IP address”).

-            ->tag('console.command', ['command' => 'geocoder:geocode', 'description' => 'Geocode an address or an ip address'])
+            ->tag('console.command', ['command' => 'geocoder:geocode', 'description' => 'Geocode an address or an IP address'])
🧹 Nitpick comments (1)
config/services.php (1)

32-36: ->private() may be unnecessary / version-sensitive in PHP configurator.

Services are private by default in modern Symfony; also ->private() has been a moving target across Symfony versions. Consider removing it (or switching to the supported equivalent like ->public(false) if needed), and confirm against your supported Symfony matrix.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 492e03c and e8d113a.

📒 Files selected for processing (11)
  • .editorconfig (1 hunks)
  • composer.json (1 hunks)
  • config/profiling.php (1 hunks)
  • config/profiling.yml (0 hunks)
  • config/services.php (1 hunks)
  • config/services.yml (0 hunks)
  • src/Command/GeocodeCommand.php (1 hunks)
  • src/DependencyInjection/BazingaGeocoderExtension.php (2 hunks)
  • tests/Functional/BundleInitializationTest.php (0 hunks)
  • tests/Functional/config/service_plugin.xml (0 hunks)
  • tests/baseline-ignore (1 hunks)
💤 Files with no reviewable changes (4)
  • config/profiling.yml
  • tests/Functional/config/service_plugin.xml
  • tests/Functional/BundleInitializationTest.php
  • config/services.yml
✅ Files skipped from review due to trivial changes (2)
  • src/Command/GeocodeCommand.php
  • tests/baseline-ignore
🚧 Files skipped from review as they are similar to previous changes (1)
  • .editorconfig
🧰 Additional context used
🧬 Code graph analysis (3)
src/DependencyInjection/BazingaGeocoderExtension.php (2)
src/BazingaGeocoderBundle.php (1)
  • BazingaGeocoderBundle (24-42)
src/DependencyInjection/Compiler/ProfilerPass.php (1)
  • ProfilerPass (25-42)
config/profiling.php (2)
src/DataCollector/GeocoderDataCollector.php (1)
  • GeocoderDataCollector (24-116)
src/DependencyInjection/Compiler/ProfilerPass.php (2)
  • ProfilerPass (25-42)
  • process (30-41)
config/services.php (3)
src/Plugin/FakeIpPlugin.php (1)
  • FakeIpPlugin (27-71)
src/Validator/Constraint/AddressValidator.php (1)
  • AddressValidator (26-81)
src/DependencyInjection/BazingaGeocoderExtension.php (1)
  • load (47-77)
🔇 Additional comments (3)
composer.json (1)

88-88: The baseline file exists and is properly formatted with 91 deprecation patterns. The phpunit configuration correctly defines a "main" testsuite pointing to the tests directory. The test script configuration is valid.

src/DependencyInjection/BazingaGeocoderExtension.php (1)

34-58: Confirm Symfony version compatibility for PhpFileLoader + PHP service config files.

PhpFileLoader + services.php / profiling.php is correct for Symfony’s PHP-based service configuration, but it’s version-sensitive—please confirm this works across the bundle’s supported Symfony versions (especially if older Symfony is still supported). Also consider adding a return type for clarity/contract:

-    public function load(array $configs, ContainerBuilder $container)
+    public function load(array $configs, ContainerBuilder $container): void
config/profiling.php (1)

5-14: Verify the data collector is reachable and the Twig template path is correct.

Given src/DependencyInjection/Compiler/ProfilerPass.php wires GeocoderDataCollector and Symfony’s profiler later renders the collector, please confirm the collector service visibility is OK for your Symfony matrix and that @BazingaGeocoder/Collector/geocoder.html.twig resolves. If you hit “service not found/removed” optimizations in any supported Symfony version, consider making it explicit:

 $services->set(GeocoderDataCollector::class)
+    ->public()
     ->tag('data_collector', ['template' => '@BazingaGeocoder/Collector/geocoder.html.twig', 'id' => 'geocoder']);

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (1)
config/services.php (1)

38-40: FakeIpPlugin null-arg safety still needs config validation (runtime type-error risk).
This wiring defaults to [null, null, false], and when fake_ip.enabled=true + fake_ip.use_faker=false + fake_ip.ip unset, FakeIpPlugin can end up calling withText(null). Please add validation in src/DependencyInjection/BazingaGeocoderExtension.php during load() (as previously suggested).

🧹 Nitpick comments (2)
src/Command/GeocodeCommand.php (1)

53-58: Add an option description for --provider (better UX / --help output).
Right now --provider shows up without any description.

-            ->addOption('provider', null, InputOption::VALUE_OPTIONAL);
+            ->addOption('provider', null, InputOption::VALUE_OPTIONAL, 'Force a specific provider (by name)');
config/services.php (1)

21-23: Reconsider making all Dumper services public.
If this is only to preserve historical service-fetching behavior, consider narrowing the scope (only specific dumpers) or adding explicit public aliases instead of blanket instanceof(...)->public().

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e8d113a and 0887847.

📒 Files selected for processing (11)
  • .editorconfig (1 hunks)
  • composer.json (1 hunks)
  • config/profiling.php (1 hunks)
  • config/profiling.yml (0 hunks)
  • config/services.php (1 hunks)
  • config/services.yml (0 hunks)
  • src/Command/GeocodeCommand.php (2 hunks)
  • src/DependencyInjection/BazingaGeocoderExtension.php (2 hunks)
  • tests/Functional/BundleInitializationTest.php (0 hunks)
  • tests/Functional/config/service_plugin.xml (0 hunks)
  • tests/baseline-ignore (1 hunks)
💤 Files with no reviewable changes (4)
  • config/profiling.yml
  • tests/Functional/config/service_plugin.xml
  • config/services.yml
  • tests/Functional/BundleInitializationTest.php
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/DependencyInjection/BazingaGeocoderExtension.php
  • config/profiling.php
  • .editorconfig
🧰 Additional context used
🧬 Code graph analysis (1)
config/services.php (3)
src/Plugin/FakeIpPlugin.php (1)
  • FakeIpPlugin (27-71)
src/Validator/Constraint/AddressValidator.php (1)
  • AddressValidator (26-81)
src/DependencyInjection/BazingaGeocoderExtension.php (1)
  • load (47-77)
🪛 GitHub Actions: CI
src/Command/GeocodeCommand.php

[error] 27-27: Unknown named parameter $help. This suggests an incompatibility with the Symfony Console version (command configuration using a 'help' option/parameter no longer recognized). Review GeocodeCommand for Symfony Console compatibility and update accordingly.

composer.json

[warning] 1-1: Symfony recipes are disabled: 'symfony/flex' not found in root composer.json.

Comment on lines +88 to 89
"test": "SYMFONY_DEPRECATIONS_HELPER=ignoreFile='./tests/baseline-ignore' vendor/bin/simple-phpunit --testsuite main"
},
Copy link

@coderabbitai coderabbitai bot Dec 12, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

symfony/phpunit-bridge SYMFONY_DEPRECATIONS_HELPER ignoreFile cross-platform configuration

💡 Result:

Short answer: use the SYMFONY_DEPRECATIONS_HELPER env var with the ignoreFile key (URL-encoded form), point it to a plain-text regex list, and prefer an absolute path or set it inside phpunit.xml to avoid shell/OS quoting issues. Examples below.

Why: the helper accepts a URL-encoded query string (keys like ignoreFile, baselineFile, max[...] etc.). The ignoreFile value is a filesystem path to a text file (one regexp per line). See Symfony docs. [1][2]

Examples

  • Unix / macOS (shell):

    • export and run:
      SYMFONY_DEPRECATIONS_HELPER='ignoreFile=./tests/deprecations-ignore' ./vendor/bin/simple-phpunit
    • absolute path (safer):
      SYMFONY_DEPRECATIONS_HELPER='ignoreFile=/full/path/to/tests/deprecations-ignore' ./vendor/bin/simple-phpunit
      Reference: docs show ignoreFile usage. [1]
  • Windows (CMD):

    • set and run:
      set SYMFONY_DEPRECATIONS_HELPER=ignoreFile=C:\path\to\tests\deprecations-ignore
      vendor\bin\simple-phpunit.bat
    • PowerShell:
      $env:SYMFONY_DEPRECATIONS_HELPER = 'ignoreFile=C:\path\to\tests\deprecations-ignore'; vendor\bin\simple-phpunit
      Note: avoid single-quote URL-encoding in CMD; PowerShell accepts the quoted string. Use absolute Windows path to avoid cwd differences. [1][2]
  • When you must combine multiple options (or include & characters) URL-encode or quote properly:

    • Unix:
      SYMFONY_DEPRECATIONS_HELPER='ignoreFile=./tests/deprecations-ignore&verbose=0' ./vendor/bin/simple-phpunit
    • If values contain ampersands or special chars, percent-encode them (e.g. & → %26) or wrap whole value in single quotes in shells that support it. [2]
  • Safer: put the env var in phpunit.xml to avoid shell quoting differences:



    This is cross-platform because PHPUnit reads phpunit.xml on all OSes. (Docs show using for SYMFONY_DEPRECATIONS_HELPER.) [2]

Tips

  • Use absolute paths to avoid cwd differences.
  • The ignoreFile format: plain text, one regexp per line; lines starting with # are comments. [1]
  • If you need a generated JSON baseline use baselineFile/generateBaseline options (also URL-encoded). [2]

References
[1] Symfony PHPUnit Bridge — Ignoring deprecations / ignoreFile usage. https://symfony.com/doc/current/components/phpunit_bridge.html
[2] Symfony docs (PHPUnit Bridge configuration; environment variable examples and baseline/ignoreFile). https://symfony.com/doc/6.1/components/phpunit_bridge.html


🌐 Web query:

composer.json scripts environment variables Windows POSIX compatibility

💡 Result:

Short answer — use a cross‑platform helper (recommended) or call platform‑specific commands.

Options

  1. Use cross-env (simple, widely used)
  • Install: npm install --save-dev cross-env.
  • composer.json example (runs an npm script but same idea for any command):
    "scripts": { "build-assets": "cross-env APP_ENV=production npm run build" }
  • cross-env lets you write POSIX style VAR=val and it works on Windows and POSIX. [1][2]
  1. Use an env file reader (env-cmd / cross-env-file) if you prefer files
  • Put vars in a file and use env-cmd or cross-env-file to load them before the command. [2][8]
  1. If you cannot add Node tools, call platform-specific forms in composer scripts (less desirable)
  • POSIX: "mycmd": "APP_ENV=production php bin/console …"
  • Windows cmd.exe: "mycmd:windows": "set APP_ENV=production&& php bin/console …" (note spacing/&&)
  • Or PowerShell: $env:APP_ENV='production'; composer …
    Composer can run different script names and you can detect OS in CI to pick the right script, but this is error‑prone. [5]

Notes

  • Composer supports environment substitution in some fields (e.g. scripts/extra) via ${VAR}, but setting inline env reliably across Windows and POSIX is best done with cross-env or an env-loader. [5][1]

Sources
[1] cross-env (package readme / docs).
[2] cross-env / cross-env-shell usage and alternatives (npm/Yarn docs).
[5] Composer: using environment variables in scripts and fields.


Move SYMFONY_DEPRECATIONS_HELPER to phpunit.xml for cross-platform compatibility.

The inline VAR=... cmd syntax is POSIX-shell-specific and will fail on Windows (CMD/PowerShell). Per Symfony's PHPUnit Bridge docs, set this as an environment variable in phpunit.xml.dist instead:

<php>
  <env name="SYMFONY_DEPRECATIONS_HELPER" value="ignoreFile=./tests/baseline-ignore"/>
</php>

This approach works across Windows, macOS, and Linux without shell-specific syntax.

🤖 Prompt for AI Agents
composer.json lines 88-89: the "test" script currently sets
SYMFONY_DEPRECATIONS_HELPER inline using POSIX shell syntax which breaks on
Windows; remove the environment variable from the npm script so the command is
just the PHPUnit invocation (vendor/bin/simple-phpunit --testsuite main) and
instead add the SYMFONY_DEPRECATIONS_HELPER env var to phpunit.xml.dist (or
phpunit.xml) by adding a <php><env name="SYMFONY_DEPRECATIONS_HELPER"
value="ignoreFile=./tests/baseline-ignore"/></php> entry so the variable is set
cross-platform.

Copy link
Member Author

@norkunas norkunas Dec 12, 2025

Choose a reason for hiding this comment

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

well then running vendor/bin/simple-phpunit will always use it and there will be no way to opt-out to check what deprecations are really triggered now and what to cleanup

Copy link

Choose a reason for hiding this comment

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

@norkunas That's a fair point! Having the flexibility to opt-out is valuable for deprecation cleanup work.

You could preserve both cross-platform compatibility and the opt-out ability by providing two scripts:

"scripts": {
  "test": "SYMFONY_DEPRECATIONS_HELPER=ignoreFile='./tests/baseline-ignore' vendor/bin/simple-phpunit --testsuite main",
  "test-all-deprecations": "vendor/bin/simple-phpunit --testsuite main"
}

This way:

  • composer test → ignores baseline deprecations
  • composer test-all-deprecations → shows all deprecations (or direct vendor/bin/simple-phpunit call)
  • Windows users could use the second script or override the env var

That said, if most of your development/CI happens on Unix-like systems and the current approach works for your workflow, the inline env var is perfectly reasonable. The Windows limitation may not be significant for your use case.

@norkunas norkunas merged commit 5852b70 into geocoder-php:master Dec 12, 2025
19 checks passed
@norkunas norkunas deleted the yml-to-php branch December 12, 2025 18:27
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.

1 participant