Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e94fe81

Browse files
committed
Include name in representation of nodes (#198)
1 parent 1a62f30 commit e94fe81

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

‎src/graphql/language/ast.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,17 @@ def __init__(self, **kwargs: Any) -> None:
359359

360360
def __repr__(self) -> str:
361361
"""Get a simple representation of the node."""
362-
name, loc = self.__class__.__name__, getattr(self, "loc", None)
363-
return f"{name} at {loc}" if loc else name
362+
rep = self.__class__.__name__
363+
if isinstance(self, NameNode):
364+
rep += f"({self.value!r})"
365+
else:
366+
name = getattr(self, "name", None)
367+
if name:
368+
rep += f"(name={name.value!r})"
369+
loc = getattr(self, "loc", None)
370+
if loc:
371+
rep += f" at {loc}"
372+
return rep
364373

365374
def __eq__(self, other: Any) -> bool:
366375
"""Test whether two nodes are equal (recursively)."""

‎tests/language/test_ast.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import weakref
22
from copy import copy, deepcopy
3+
from typing import Optional
34

4-
from graphql.language import Location, Node, Source, Token, TokenKind
5+
from graphql.language import Location, NameNode, Node, Source, Token, TokenKind
56
from graphql.pyutils import inspect
67

78

@@ -12,6 +13,13 @@ class SampleTestNode(Node):
1213
beta: int
1314

1415

16+
class SampleNamedNode(Node):
17+
__slots__ = "foo", "name"
18+
19+
foo: str
20+
name: Optional[str]
21+
22+
1523
def describe_token_class():
1624
def initializes():
1725
token = Token(
@@ -160,6 +168,25 @@ def has_representation_with_loc():
160168
node = SampleTestNode(alpha=1, beta=2, loc=3)
161169
assert repr(node) == "SampleTestNode at 3"
162170

171+
def has_representation_when_named():
172+
name_node = NameNode(value="baz")
173+
node = SampleNamedNode(foo="bar", name=name_node)
174+
assert repr(node) == "SampleNamedNode(name='baz')"
175+
node = SampleNamedNode(alpha=1, beta=2, name=name_node, loc=3)
176+
assert repr(node) == "SampleNamedNode(name='baz') at 3"
177+
178+
def has_representation_when_named_but_name_is_none():
179+
node = SampleNamedNode(alpha=1, beta=2, name=None)
180+
assert repr(node) == "SampleNamedNode"
181+
node = SampleNamedNode(alpha=1, beta=2, name=None, loc=3)
182+
assert repr(node) == "SampleNamedNode at 3"
183+
184+
def has_special_representation_when_it_is_a_name_node():
185+
node = NameNode(value="foo")
186+
assert repr(node) == "NameNode('foo')"
187+
node = NameNode(value="foo", loc=3)
188+
assert repr(node) == "NameNode('foo') at 3"
189+
163190
def can_check_equality():
164191
node = SampleTestNode(alpha=1, beta=2)
165192
node2 = SampleTestNode(alpha=1, beta=2)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /