Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

inconsistent warnings #1509

Open
p5pRT opened this issue Mar 26, 2000 · 14 comments
Open

inconsistent warnings #1509

p5pRT opened this issue Mar 26, 2000 · 14 comments

Comments

@p5pRT
Copy link

p5pRT commented Mar 26, 2000

Migrated from rt.perl.org#2723 (status was 'open')

Searchable as RT2723$

@p5pRT
Copy link
Author

p5pRT commented Mar 26, 2000

From tchrist@chthon.perl.com

One is no longer warned about this​:

  $int = 1;
  $name{int} = "check";

Nor about this​:

  print "I have ${int} warning.\n";

But one *is* still warned about this​:

  print "I have ", ${int}, " warning.\n";

  $int = 1;
  $name{int} = "check";

Nor about this​:

  $int = 1;
  print "I have ${int} warning.\n";

But one *is* still warned about this​:

  $int = 1;
  print "I have ", ${int}, " warning.\n";

This has been the state of world since Summer of '98, at
the latest. It just seems inconsistent. Was this missed,
or was there a reason?

--tom

@p5pRT
Copy link
Author

p5pRT commented Mar 26, 2000

From tchrist@chthon.perl.com

perl
perl perl perl perl perl perl perl
perl

Stupid bugger. And you wonder why I don't use this thing.

------- Forwarded Message

Date​: Sun, 26 Mar 2000 20​:07​:47 MST
From​: Tom Christiansen <tchrist@​chthon.perl.com>
Subject​: perlbug BOUNCE​: 'inconsistent warnings'
To​: Tom Christiansen <tchrist@​chthon.perl.com>
X-loop​: perlbug@​perl.org

  This email address is for reporting bugs to the perl community via perlbug@​perl.
org.
 
  BOUNCE​: addressed to perlbug but with no 'perl' in body
 
  Please address your mail appropriately and include output from the perlbug progr
am
  as per the distributed documentation.
 
  Hint​: mail should include output from 'perl -V'
  -----------------------------------------------
  One is no longer warned about this​:

  $int = 1;
  $name{int} = "check";

Nor about this​:

  print "I have ${int} warning.\n";

But one *is* still warned about this​:

  print "I have ", ${int}, " warning.\n";

  $int = 1;
  $name{int} = "check";

Nor about this​:

  $int = 1;
  print "I have ${int} warning.\n";

But one *is* still warned about this​:

  $int = 1;
  print "I have ", ${int}, " warning.\n";

This has been the state of world since Summer of '98, at
the latest. It just seems inconsistent. Was this missed,
or was there a reason?

- --tom

 

------- End of Forwarded Message

@p5pRT
Copy link
Author

p5pRT commented Dec 8, 2002

From @rspier

Dupe of #2723

@p5pRT
Copy link
Author

p5pRT commented Dec 8, 2002

@rspier - Status changed from 'open' to 'resolved'

@p5pRT
Copy link
Author

p5pRT commented Jul 16, 2003

From @schwern

[tchrist <!--c--> <i>at</i> <!--a--> chthon.perl.com - Sun Mar 26 11​:07​:58 2000]​:

One is no longer warned about this​:

$int = 1;
$name\{int\} = "check";

Good.

Nor about this​:

print "I have $\{int\} warning\.\\n";

This does cause a warning in 5.6.0, 5.8.0 and 5.8.1 RC 2.

$ perl5.8.1 -wle 'print "I have ${int} warning.\n";'
Name "main​::int" used only once​: possible typo at -e line 1.
Use of uninitialized value in concatenation (.) or string at -e line 1.
I have warning.

But one *is* still warned about this​:

print "I have "\, $\{int\}\, " warning\.\\n";

$int = 1;
$name\{int\} = "check";

You're warned about the first part, anyway. Not sure why its ambiguous.

$ perl5.8.1 -wle 'print "I have ", ${int}, " warning.\n"; $int=1; $name{int} = "check"'
Ambiguous use of ${int} resolved to $int at -e line 1.
Name "main​::name" used only once​: possible typo at -e line 1.
Use of uninitialized value in print at -e line 1.
I have warning.

Nor about this​:

$int = 1;
print "I have $\{int\} warning\.\\n";

Good.

But one *is* still warned about this​:

$int = 1;
print "I have "\, $\{int\}\, " warning\.\\n";

Again the ambiguous warning.

The warning comes from toke.c line 6331, FWIW.

@p5pRT
Copy link
Author

p5pRT commented Jul 16, 2003

From tchrist@chthon.perl.com

You're warned about the first part, anyway. Not sure why its ambiguous.

$ perl5.8.1 -wle 'print "I have ", ${int}, " warning.\n"; $int=1; $name<SNIP>
Ambiguous use of ${int} resolved to $int at -e line 1.

Because ${int} means ${"int"} not ${int()}, nearly.

--tom

@p5pRT
Copy link
Author

p5pRT commented Nov 23, 2011

From @jkeenan

On Tue Jul 15 20​:01​:14 2003, tchrist@​chthon.perl.com wrote​:

You're warned about the first part, anyway. Not sure why its
ambiguous.

$ perl5.8.1 -wle 'print "I have ", ${int}, " warning.\n"; $int=1;
$name<SNIP>
Ambiguous use of ${int} resolved to $int at -e line 1.

Because ${int} means ${"int"} not ${int()}, nearly.

Are there any issues remaining in this ticket?

@p5pRT
Copy link
Author

p5pRT commented Jan 11, 2012

From @cpansprout

On Tue Nov 22 19​:50​:15 2011, jkeenan wrote​:

On Tue Jul 15 20​:01​:14 2003, tchrist@​chthon.perl.com wrote​:

You're warned about the first part, anyway. Not sure why its
ambiguous.

$ perl5.8.1 -wle 'print "I have ", ${int}, " warning.\n"; $int=1;
$name<SNIP>
Ambiguous use of ${int} resolved to $int at -e line 1.

Because ${int} means ${"int"} not ${int()}, nearly.

Are there any issues remaining in this ticket?

Yes, it’s this inconsistency​:

$ perl5.15.6 -le 'use warnings "ambiguous"; $name{int}'
$ perl5.15.6 -le 'use warnings "ambiguous"; ${int}'
Ambiguous use of ${int} resolved to $int at -e line 1.

I think that ambiguous warning should be extirpated. There is no
ambiguity there. ${...} always implicitly quotes a single bareword with
no + or ; or () ornamenting it.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented May 5, 2012

From @Hugmeir

On Wed Jan 11 13​:24​:59 2012, sprout wrote​:

On Tue Nov 22 19​:50​:15 2011, jkeenan wrote​:

On Tue Jul 15 20​:01​:14 2003, tchrist@​chthon.perl.com wrote​:

You're warned about the first part, anyway. Not sure why its
ambiguous.

$ perl5.8.1 -wle 'print "I have ", ${int}, " warning.\n";
$int=1;
$name<SNIP>
Ambiguous use of ${int} resolved to $int at -e line 1.

Because ${int} means ${"int"} not ${int()}, nearly.

Are there any issues remaining in this ticket?

Yes, it’s this inconsistency​:

$ perl5.15.6 -le 'use warnings "ambiguous"; $name{int}'
$ perl5.15.6 -le 'use warnings "ambiguous"; ${int}'
Ambiguous use of ${int} resolved to $int at -e line 1.

I think that ambiguous warning should be extirpated. There is no
ambiguity there. ${...} always implicitly quotes a single bareword
with
no + or ; or () ornamenting it.

I'm not entirely convinced about removing the warning, at least not
entirely. The ambiguity seems more in the intent of the code, rather
than the parsing. For example​:

use warnings 'ambiguous';
sub etc () {'$fred'}
${etc} = 1;

On the other hand, I can't think of any other case where the warning
would be useful. And making it warn because the bareword is a keyword
seems useless to me.
Plus, it's not even self-consistent! ${time[0]} will warn, but
${some_sub[0]} won't.

I'm attaching three patches; The first one disables the ${%s} warning
when %s is a keyword, so that it only triggers for subs. The second
disables the ${%s[...]} and ${%s{...}} warnings when %s is a keyword,
and make it warn when %s is a sub. The third removes the two warnings
altogether.

@p5pRT
Copy link
Author

p5pRT commented May 5, 2012

From @Hugmeir

0001-Disable-the-Ambiguous-use-of-.-warning-for-keywords.patch
From 05feda8e9859af13cc3bb56d024b7c8c0fcc4e4e Mon Sep 17 00:00:00 2001
From: Brian Fraser <fraserbn@gmail.com>
Date: Sat, 5 May 2012 05:39:13 -0300
Subject: [PATCH 1/3] Disable the "Ambiguous use of ${...}" warning for
 keywords

---
 t/lib/feature/switch |    1 -
 t/lib/warnings/toke  |    2 +-
 toke.c               |    5 ++---
 3 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/t/lib/feature/switch b/t/lib/feature/switch
index 5da635b..817d8b2 100644
--- a/t/lib/feature/switch
+++ b/t/lib/feature/switch
@@ -137,6 +137,5 @@ use feature 'switch';
 @break = ($break = "break");
 print ${break}, ${break[0]};
 EXPECT
-Ambiguous use of ${break} resolved to $break at - line 5.
 Ambiguous use of ${break[...]} resolved to $break[...] at - line 5.
 breakbreak
diff --git a/t/lib/warnings/toke b/t/lib/warnings/toke
index dd8dc3d..21bd821 100644
--- a/t/lib/warnings/toke
+++ b/t/lib/warnings/toke
@@ -408,7 +408,7 @@ $a = ${time} ;
 no warnings 'ambiguous' ;
 $a = ${time} ;
 EXPECT
-Ambiguous use of ${time} resolved to $time at - line 3.
+
 ########
 # toke.c
 use warnings 'ambiguous' ;
diff --git a/toke.c b/toke.c
index 1d18550..3aa5efb 100644
--- a/toke.c
+++ b/toke.c
@@ -8979,9 +8979,8 @@ S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRL
 		PL_expect = XREF;
 	    }
 	    if (PL_lex_state == LEX_NORMAL) {
-		if (ckWARN(WARN_AMBIGUOUS) &&
-		    (keyword(dest, d - dest, 0)
-		     || get_cvn_flags(dest, d - dest, UTF ? SVf_UTF8 : 0)))
+		if (ckWARN(WARN_AMBIGUOUS)
+		     && get_cvn_flags(dest, d - dest, UTF ? SVf_UTF8 : 0))
 		{
                     SV *tmp = newSVpvn_flags( dest, d - dest,
                                             SVs_TEMP | (UTF ? SVf_UTF8 : 0) );
-- 
1.7.9.5

@p5pRT
Copy link
Author

p5pRT commented May 5, 2012

From @Hugmeir

0002-Ambiguous-use-of-c-s-.-resolved-to-c-s-.-sanity.patch
From f203bab725c23b09d3447b57750c06cb72fb3840 Mon Sep 17 00:00:00 2001
From: Brian Fraser <fraserbn@gmail.com>
Date: Sat, 5 May 2012 06:08:40 -0300
Subject: [PATCH 2/3] "Ambiguous use of %c{%s[...]} resolved to %c%s[...]"
 sanity.

Previously, it would only warn if %s was a keyword. Now it's
consistent with the other 'Ambiguous use' warning, and
triggers if %s is a function.
---
 t/lib/feature/switch |   24 ++++++++++++++++++++++--
 t/lib/warnings/toke  |   22 ++++++++++++++++++++--
 toke.c               |   12 ++++++++----
 3 files changed, 50 insertions(+), 8 deletions(-)

diff --git a/t/lib/feature/switch b/t/lib/feature/switch
index 817d8b2..d2d18fc 100644
--- a/t/lib/feature/switch
+++ b/t/lib/feature/switch
@@ -131,11 +131,31 @@ print ${break}, ${break[0]};
 EXPECT
 breakbreak
 ########
-# With the feature, we get an 'Unambiguous use of' warning:
+# Without the feature but declaring break as a sub, 'Ambiguous use of' warning:
 use warnings;
-use feature 'switch';
+use subs qw( break );
 @break = ($break = "break");
 print ${break}, ${break[0]};
 EXPECT
+Ambiguous use of ${break} resolved to $break at - line 5.
 Ambiguous use of ${break[...]} resolved to $break[...] at - line 5.
 breakbreak
+########
+# With the feature, we don't get a 'Ambiguous use of' warning:
+use warnings;
+use feature 'switch';
+@break = ($break = "break");
+print ${break}, ${break[0]};
+EXPECT
+breakbreak
+########
+# With the feature and declaring break as a sub, 'Ambiguous use of' warning:
+use warnings;
+use feature 'switch';
+use subs qw( break );
+@break = ($break = "break");
+print ${break}, ${break[0]};
+EXPECT
+Ambiguous use of ${break} resolved to $break at - line 6.
+Ambiguous use of ${break[...]} resolved to $break[...] at - line 6.
+breakbreak
diff --git a/t/lib/warnings/toke b/t/lib/warnings/toke
index 21bd821..6928541 100644
--- a/t/lib/warnings/toke
+++ b/t/lib/warnings/toke
@@ -58,11 +58,13 @@ toke.c	AOK
 	sort ("")
 
      Ambiguous use of %c{%s%s} resolved to %c%s%s 
+   sub time {}
 	$a = ${time[2]}
 	$a = ${time{2}}
 
 
      Ambiguous use of %c{%s} resolved to %c%s
+   sub time {}
 	$a = ${time}
 	sub fred {} $a = ${fred}
 
@@ -388,13 +390,29 @@ $a = ${time[2]};
 no warnings 'ambiguous' ;
 $a = ${time[2]};
 EXPECT
-Ambiguous use of ${time[...]} resolved to $time[...] at - line 3.
+
+########
+# toke.c
+use warnings 'ambiguous' ;
+use subs qw( time );
+$a = ${time[2]};
+no warnings 'ambiguous' ;
+$a = ${time[2]};
+EXPECT
+Ambiguous use of ${time[...]} resolved to $time[...] at - line 4.
+########
+# toke.c
+use warnings 'ambiguous' ;
+$a = ${time{2}};
+EXPECT
+
 ########
 # toke.c
 use warnings 'ambiguous' ;
+use subs qw( time );
 $a = ${time{2}};
 EXPECT
-Ambiguous use of ${time{...}} resolved to $time{...} at - line 3.
+Ambiguous use of ${time{...}} resolved to $time{...} at - line 4.
 ########
 # toke.c
 no warnings 'ambiguous' ;
diff --git a/toke.c b/toke.c
index 3aa5efb..10376b4 100644
--- a/toke.c
+++ b/toke.c
@@ -8944,15 +8944,19 @@ S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRL
 	    while (s < send && SPACE_OR_TAB(*s))
 		s++;
 	    if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
-		if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest, 0)) {
+		if (ckWARN(WARN_AMBIGUOUS)
+            && get_cvn_flags(dest, d - dest, UTF ? SVf_UTF8 : 0))
+          {
 		    const char * const brack =
 			(const char *)
 			((*s == '[') ? "[...]" : "{...}");
+          SV *tmp = newSVpvn_flags( dest, d - dest,
+                                        SVs_TEMP | (UTF ? SVf_UTF8 : 0) );
    /* diag_listed_as: Ambiguous use of %c{%s[...]} resolved to %c%s[...] */
 		    Perl_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
-			"Ambiguous use of %c{%s%s} resolved to %c%s%s",
-			funny, dest, brack, funny, dest, brack);
-		}
+			"Ambiguous use of %c{%"SVf"%s} resolved to %c%"SVf"%s",
+			funny, tmp, brack, funny, tmp, brack);
+          }
 		bracket++;
 		PL_lex_brackstack[PL_lex_brackets++] = (char)(XOPERATOR | XFAKEBRACK);
 		PL_lex_allbrackets++;
-- 
1.7.9.5

@p5pRT
Copy link
Author

p5pRT commented May 5, 2012

From @Hugmeir

0003-Remove-the-Ambiguous-sue-of-s-warnings.patch
From 9ebea17cbe610635b09cffa4e50d276a2cf9d795 Mon Sep 17 00:00:00 2001
From: Brian Fraser <fraserbn@gmail.com>
Date: Sat, 5 May 2012 06:58:59 -0300
Subject: [PATCH 3/3] Remove the "Ambiguous sue of ${%s}" warnings

---
 t/lib/feature/switch |    4 ----
 t/lib/warnings/toke  |   10 +++++-----
 toke.c               |   29 +----------------------------
 3 files changed, 6 insertions(+), 37 deletions(-)

diff --git a/t/lib/feature/switch b/t/lib/feature/switch
index d2d18fc..2efe9d5 100644
--- a/t/lib/feature/switch
+++ b/t/lib/feature/switch
@@ -137,8 +137,6 @@ use subs qw( break );
 @break = ($break = "break");
 print ${break}, ${break[0]};
 EXPECT
-Ambiguous use of ${break} resolved to $break at - line 5.
-Ambiguous use of ${break[...]} resolved to $break[...] at - line 5.
 breakbreak
 ########
 # With the feature, we don't get a 'Ambiguous use of' warning:
@@ -156,6 +154,4 @@ use subs qw( break );
 @break = ($break = "break");
 print ${break}, ${break[0]};
 EXPECT
-Ambiguous use of ${break} resolved to $break at - line 6.
-Ambiguous use of ${break[...]} resolved to $break[...] at - line 6.
 breakbreak
diff --git a/t/lib/warnings/toke b/t/lib/warnings/toke
index 6928541..92f7308 100644
--- a/t/lib/warnings/toke
+++ b/t/lib/warnings/toke
@@ -399,7 +399,7 @@ $a = ${time[2]};
 no warnings 'ambiguous' ;
 $a = ${time[2]};
 EXPECT
-Ambiguous use of ${time[...]} resolved to $time[...] at - line 4.
+
 ########
 # toke.c
 use warnings 'ambiguous' ;
@@ -412,7 +412,7 @@ use warnings 'ambiguous' ;
 use subs qw( time );
 $a = ${time{2}};
 EXPECT
-Ambiguous use of ${time{...}} resolved to $time{...} at - line 4.
+
 ########
 # toke.c
 no warnings 'ambiguous' ;
@@ -435,7 +435,7 @@ $a = ${fred} ;
 no warnings 'ambiguous' ;
 $a = ${fred} ;
 EXPECT
-Ambiguous use of ${fred} resolved to $fred at - line 4.
+
 ########
 # toke.c
 use warnings 'syntax' ;
@@ -1248,7 +1248,7 @@ $a = ${fr��d} ;
 no warnings 'ambiguous' ;
 $a = ${fr��d} ;
 EXPECT
-Ambiguous use of ${fr��d} resolved to $fr��d at - line 6.
+
 ########
 # toke.c
 use utf8;
@@ -1259,7 +1259,7 @@ $a = ${f���} ;
 no warnings 'ambiguous' ;
 $a = ${f���} ;
 EXPECT
-Ambiguous use of ${f���} resolved to $f��� at - line 6.
+
 ########
 # toke.c
 use utf8;
diff --git a/toke.c b/toke.c
index 10376b4..8db881b 100644
--- a/toke.c
+++ b/toke.c
@@ -8832,13 +8832,12 @@ S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRL
 {
     dVAR;
     char *bracket = NULL;
-    char funny = *s++;
     register char *d = dest;
     register char * const e = d + destlen - 3;    /* two-character token, ending NUL */
 
     PERL_ARGS_ASSERT_SCAN_IDENT;
 
-    if (isSPACE(*s))
+    if (isSPACE(*++s))
 	s = PEEKSPACE(s);
     if (isDIGIT(*s)) {
 	while (isDIGIT(*s)) {
@@ -8944,19 +8943,6 @@ S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRL
 	    while (s < send && SPACE_OR_TAB(*s))
 		s++;
 	    if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
-		if (ckWARN(WARN_AMBIGUOUS)
-            && get_cvn_flags(dest, d - dest, UTF ? SVf_UTF8 : 0))
-          {
-		    const char * const brack =
-			(const char *)
-			((*s == '[') ? "[...]" : "{...}");
-          SV *tmp = newSVpvn_flags( dest, d - dest,
-                                        SVs_TEMP | (UTF ? SVf_UTF8 : 0) );
-   /* diag_listed_as: Ambiguous use of %c{%s[...]} resolved to %c%s[...] */
-		    Perl_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
-			"Ambiguous use of %c{%"SVf"%s} resolved to %c%"SVf"%s",
-			funny, tmp, brack, funny, tmp, brack);
-          }
 		bracket++;
 		PL_lex_brackstack[PL_lex_brackets++] = (char)(XOPERATOR | XFAKEBRACK);
 		PL_lex_allbrackets++;
@@ -8982,19 +8968,6 @@ S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRL
 		PL_lex_state = LEX_INTERPEND;
 		PL_expect = XREF;
 	    }
-	    if (PL_lex_state == LEX_NORMAL) {
-		if (ckWARN(WARN_AMBIGUOUS)
-		     && get_cvn_flags(dest, d - dest, UTF ? SVf_UTF8 : 0))
-		{
-                    SV *tmp = newSVpvn_flags( dest, d - dest,
-                                            SVs_TEMP | (UTF ? SVf_UTF8 : 0) );
-		    if (funny == '#')
-			funny = '@';
-		    Perl_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
-			"Ambiguous use of %c{%"SVf"} resolved to %c%"SVf,
-			funny, tmp, funny, tmp);
-		}
-	    }
 	}
 	else {
 	    s = bracket;		/* let the parser handle it */
-- 
1.7.9.5

@p5pRT
Copy link
Author

p5pRT commented May 5, 2012

From @cpansprout

On Sat May 05 05​:30​:43 2012, Hugmeir wrote​:

On Wed Jan 11 13​:24​:59 2012, sprout wrote​:

On Tue Nov 22 19​:50​:15 2011, jkeenan wrote​:

On Tue Jul 15 20​:01​:14 2003, tchrist@​chthon.perl.com wrote​:

You're warned about the first part, anyway. Not sure why its
ambiguous.

$ perl5.8.1 -wle 'print "I have ", ${int}, " warning.\n";
$int=1;
$name<SNIP>
Ambiguous use of ${int} resolved to $int at -e line 1.

Because ${int} means ${"int"} not ${int()}, nearly.

Are there any issues remaining in this ticket?

Yes, it’s this inconsistency​:

$ perl5.15.6 -le 'use warnings "ambiguous"; $name{int}'
$ perl5.15.6 -le 'use warnings "ambiguous"; ${int}'
Ambiguous use of ${int} resolved to $int at -e line 1.

I think that ambiguous warning should be extirpated. There is no
ambiguity there. ${...} always implicitly quotes a single bareword
with
no + or ; or () ornamenting it.

I'm not entirely convinced about removing the warning, at least not
entirely. The ambiguity seems more in the intent of the code, rather
than the parsing. For example​:

use warnings 'ambiguous';
sub etc () {'$fred'}
${etc} = 1;

On the other hand, I can't think of any other case where the warning
would be useful. And making it warn because the bareword is a keyword
seems useless to me.
Plus, it's not even self-consistent! ${time[0]} will warn, but
${some_sub[0]} won't.

Well, you are changing subject slightly by putting brackets inside the
braces. That bizarre syntax is, well, bizarre--and inconsistent in the
way it is parsed​:

  ${sub{0}} # same as ${ +sub { 0; } }
  ${time{0}} # same as $time{"0"} or (\%time)->{"0"}

I'm attaching three patches; The first one disables the ${%s} warning
when %s is a keyword, so that it only triggers for subs. The second
disables the ${%s[...]} and ${%s{...}} warnings when %s is a keyword,
and make it warn when %s is a sub.

The example above suggests that a warning might still be apposite for
this syntax.

The third removes the two warnings
altogether.

It looks as though we need a fourth option....

--

Father Chrysostomos

@demerphq
Copy link
Collaborator

We should do something about this ticket or close it.

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

No branches or pull requests

3 participants