Skip to content

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

+11-2
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

+28-1
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)