|
3 | 3 | import json |
4 | 4 |
|
5 | 5 |
|
6 | | -def to_json(value): |
| 6 | +def to_json(value, fn=None): |
7 | 7 | if isinstance(value, BaseNode): |
8 | | - return value.to_json() |
| 8 | + return value.to_json(fn) |
9 | 9 | if isinstance(value, list): |
10 | | - return list(map(to_json, value)) |
| 10 | + return list(to_json(item, fn) for item in value) |
11 | 11 | if isinstance(value, tuple): |
12 | | - return list(map(to_json, value)) |
| 12 | + return list(to_json(item, fn) for item in value) |
13 | 13 | else: |
14 | 14 | return value |
15 | 15 |
|
@@ -119,15 +119,15 @@ def equals(self, other, ignored_fields=['span']): |
119 | 119 |
|
120 | 120 | return True |
121 | 121 |
|
122 | | - def to_json(self): |
| 122 | + def to_json(self, fn=None): |
123 | 123 | obj = { |
124 | | - name: to_json(value) |
| 124 | + name: to_json(value, fn) |
125 | 125 | for name, value in vars(self).items() |
126 | 126 | } |
127 | 127 | obj.update( |
128 | 128 | {'type': self.__class__.__name__} |
129 | 129 | ) |
130 | | - return obj |
| 130 | + return fn(obj) if fn else obj |
131 | 131 |
|
132 | 132 | def __str__(self): |
133 | 133 | return json.dumps(self.to_json()) |
@@ -207,8 +207,9 @@ class Expression(SyntaxNode): |
207 | 207 |
|
208 | 208 |
|
209 | 209 | class StringLiteral(Expression): |
210 | | - def __init__(self, value, **kwargs): |
| 210 | + def __init__(self, raw, value, **kwargs): |
211 | 211 | super(StringLiteral, self).__init__(**kwargs) |
| 212 | + self.raw = raw |
212 | 213 | self.value = value |
213 | 214 |
|
214 | 215 |
|
@@ -236,6 +237,12 @@ def __init__(self, id, **kwargs): |
236 | 237 | self.id = id |
237 | 238 |
|
238 | 239 |
|
| 240 | +class FunctionReference(Expression): |
| 241 | + def __init__(self, id, **kwargs): |
| 242 | + super(FunctionReference, self).__init__(**kwargs) |
| 243 | + self.id = id |
| 244 | + |
| 245 | + |
239 | 246 | class SelectExpression(Expression): |
240 | 247 | def __init__(self, selector, variants, **kwargs): |
241 | 248 | super(SelectExpression, self).__init__(**kwargs) |
@@ -324,11 +331,6 @@ def __init__(self, content=None, **kwargs): |
324 | 331 | super(ResourceComment, self).__init__(content, **kwargs) |
325 | 332 |
|
326 | 333 |
|
327 | | -class Function(Identifier): |
328 | | - def __init__(self, name, **kwargs): |
329 | | - super(Function, self).__init__(name, **kwargs) |
330 | | - |
331 | | - |
332 | 334 | class Junk(SyntaxNode): |
333 | 335 | def __init__(self, content=None, annotations=None, **kwargs): |
334 | 336 | super(Junk, self).__init__(**kwargs) |
|
0 commit comments