Skip to content

Commit 0017df7

Browse files
committed
Externalize Visitor/Transformer from ast to visitor, add docs
For 3866f76
1 parent 8a6e44e commit 0017df7

23 files changed

Lines changed: 726 additions & 155 deletions

fluent.syntax/stable/_modules/fluent/syntax.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ <h1>Source code for fluent.syntax</h1><div class="highlight"><pre>
6262
<h3><a href="../../index.html">Table of Contents</a></h3>
6363
<p class="caption"><span class="caption-text">Contents:</span></p>
6464
<ul>
65+
<li class="toctree-l1"><a class="reference internal" href="../../usage.html">Using fluent.syntax</a></li>
6566
<li class="toctree-l1"><a class="reference internal" href="../../reference.html">API Reference</a></li>
6667
</ul>
6768

fluent.syntax/stable/_modules/fluent/syntax/ast.html

Lines changed: 1 addition & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -45,67 +45,6 @@ <h1>Source code for fluent.syntax.ast</h1><div class="highlight"><pre>
4545
<span class="kn">import</span> <span class="nn">six</span>
4646

4747

48-
<div class="viewcode-block" id="Visitor"><a class="viewcode-back" href="../../../ast.html#fluent.syntax.ast.Visitor">[docs]</a><span class="k">class</span> <span class="nc">Visitor</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
49-
<span class="sd">&#39;&#39;&#39;Read-only visitor pattern.</span>
50-
51-
<span class="sd"> Subclass this to gather information from an AST.</span>
52-
<span class="sd"> To generally define which nodes not to descend in to, overload</span>
53-
<span class="sd"> `generic_visit`.</span>
54-
<span class="sd"> To handle specific node types, add methods like `visit_Pattern`.</span>
55-
<span class="sd"> If you want to still descend into the children of the node, call</span>
56-
<span class="sd"> `generic_visit` of the superclass.</span>
57-
<span class="sd"> &#39;&#39;&#39;</span>
58-
<span class="k">def</span> <span class="nf">visit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
59-
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
60-
<span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">node</span><span class="p">:</span>
61-
<span class="bp">self</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
62-
<span class="k">return</span>
63-
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">BaseNode</span><span class="p">):</span>
64-
<span class="k">return</span>
65-
<span class="n">nodename</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
66-
<span class="n">visit</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;visit_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">nodename</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_visit</span><span class="p">)</span>
67-
<span class="n">visit</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
68-
69-
<span class="k">def</span> <span class="nf">generic_visit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
70-
<span class="k">for</span> <span class="n">propname</span><span class="p">,</span> <span class="n">propvalue</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
71-
<span class="bp">self</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">propvalue</span><span class="p">)</span></div>
72-
73-
74-
<div class="viewcode-block" id="Transformer"><a class="viewcode-back" href="../../../ast.html#fluent.syntax.ast.Transformer">[docs]</a><span class="k">class</span> <span class="nc">Transformer</span><span class="p">(</span><span class="n">Visitor</span><span class="p">):</span>
75-
<span class="sd">&#39;&#39;&#39;In-place AST Transformer pattern.</span>
76-
77-
<span class="sd"> Subclass this to create an in-place modified variant</span>
78-
<span class="sd"> of the given AST.</span>
79-
<span class="sd"> If you need to keep the original AST around, pass</span>
80-
<span class="sd"> a `node.clone()` to the transformer.</span>
81-
<span class="sd"> &#39;&#39;&#39;</span>
82-
<span class="k">def</span> <span class="nf">visit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
83-
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">BaseNode</span><span class="p">):</span>
84-
<span class="k">return</span> <span class="n">node</span>
85-
86-
<span class="n">nodename</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
87-
<span class="n">visit</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;visit_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">nodename</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_visit</span><span class="p">)</span>
88-
<span class="k">return</span> <span class="n">visit</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
89-
90-
<span class="k">def</span> <span class="nf">generic_visit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
91-
<span class="k">for</span> <span class="n">propname</span><span class="p">,</span> <span class="n">propvalue</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
92-
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">propvalue</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
93-
<span class="n">new_vals</span> <span class="o">=</span> <span class="p">[]</span>
94-
<span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">propvalue</span><span class="p">:</span>
95-
<span class="n">new_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
96-
<span class="k">if</span> <span class="n">new_val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
97-
<span class="n">new_vals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">new_val</span><span class="p">)</span>
98-
<span class="c1"># in-place manipulation</span>
99-
<span class="n">propvalue</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">new_vals</span>
100-
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">propvalue</span><span class="p">,</span> <span class="n">BaseNode</span><span class="p">):</span>
101-
<span class="n">new_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">propvalue</span><span class="p">)</span>
102-
<span class="k">if</span> <span class="n">new_val</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
103-
<span class="nb">delattr</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">propname</span><span class="p">)</span>
104-
<span class="k">else</span><span class="p">:</span>
105-
<span class="nb">setattr</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">propname</span><span class="p">,</span> <span class="n">new_val</span><span class="p">)</span>
106-
<span class="k">return</span> <span class="n">node</span></div>
107-
108-
10948
<span class="k">def</span> <span class="nf">to_json</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">fn</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
11049
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">BaseNode</span><span class="p">):</span>
11150
<span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">to_json</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
@@ -151,33 +90,6 @@ <h1>Source code for fluent.syntax.ast</h1><div class="highlight"><pre>
15190
<span class="sd"> Annotation. Implements __str__, to_json and traverse.</span>
15291
<span class="sd"> &quot;&quot;&quot;</span>
15392

154-
<div class="viewcode-block" id="BaseNode.traverse"><a class="viewcode-back" href="../../../ast.html#fluent.syntax.ast.BaseNode.traverse">[docs]</a> <span class="k">def</span> <span class="nf">traverse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fun</span><span class="p">):</span>
155-
<span class="sd">&quot;&quot;&quot;DEPRECATED. Please use Visitor or Transformer.</span>
156-
157-
<span class="sd"> Postorder-traverse this node and apply `fun` to all child nodes.</span>
158-
159-
<span class="sd"> Traverse this node depth-first applying `fun` to subnodes and leaves.</span>
160-
<span class="sd"> Children are processed before parents (postorder traversal).</span>
161-
162-
<span class="sd"> Return a new instance of the node.</span>
163-
<span class="sd"> &quot;&quot;&quot;</span>
164-
165-
<span class="k">def</span> <span class="nf">visit</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
166-
<span class="sd">&quot;&quot;&quot;Call `fun` on `value` and its descendants.&quot;&quot;&quot;</span>
167-
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">BaseNode</span><span class="p">):</span>
168-
<span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">traverse</span><span class="p">(</span><span class="n">fun</span><span class="p">)</span>
169-
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
170-
<span class="k">return</span> <span class="n">fun</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">visit</span><span class="p">,</span> <span class="n">value</span><span class="p">)))</span>
171-
<span class="k">else</span><span class="p">:</span>
172-
<span class="k">return</span> <span class="n">fun</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
173-
174-
<span class="c1"># Use all attributes found on the node as kwargs to the constructor.</span>
175-
<span class="n">kwargs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
176-
<span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span>
177-
<span class="o">**</span><span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">visit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">})</span>
178-
179-
<span class="k">return</span> <span class="n">fun</span><span class="p">(</span><span class="n">node</span><span class="p">)</span></div>
180-
18193
<div class="viewcode-block" id="BaseNode.clone"><a class="viewcode-back" href="../../../ast.html#fluent.syntax.ast.BaseNode.clone">[docs]</a> <span class="k">def</span> <span class="nf">clone</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
18294
<span class="sd">&quot;&quot;&quot;Create a deep clone of the current node.&quot;&quot;&quot;</span>
18395
<span class="k">def</span> <span class="nf">visit</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
@@ -484,6 +396,7 @@ <h1>Source code for fluent.syntax.ast</h1><div class="highlight"><pre>
484396
<h3><a href="../../../index.html">Table of Contents</a></h3>
485397
<p class="caption"><span class="caption-text">Contents:</span></p>
486398
<ul>
399+
<li class="toctree-l1"><a class="reference internal" href="../../../usage.html">Using fluent.syntax</a></li>
487400
<li class="toctree-l1"><a class="reference internal" href="../../../reference.html">API Reference</a></li>
488401
</ul>
489402

fluent.syntax/stable/_modules/fluent/syntax/parser.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,7 @@ <h1>Source code for fluent.syntax.parser</h1><div class="highlight"><pre>
730730
<h3><a href="../../../index.html">Table of Contents</a></h3>
731731
<p class="caption"><span class="caption-text">Contents:</span></p>
732732
<ul>
733+
<li class="toctree-l1"><a class="reference internal" href="../../../usage.html">Using fluent.syntax</a></li>
733734
<li class="toctree-l1"><a class="reference internal" href="../../../reference.html">API Reference</a></li>
734735
</ul>
735736

fluent.syntax/stable/_modules/fluent/syntax/serializer.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ <h1>Source code for fluent.syntax.serializer</h1><div class="highlight"><pre>
269269
<h3><a href="../../../index.html">Table of Contents</a></h3>
270270
<p class="caption"><span class="caption-text">Contents:</span></p>
271271
<ul>
272+
<li class="toctree-l1"><a class="reference internal" href="../../../usage.html">Using fluent.syntax</a></li>
272273
<li class="toctree-l1"><a class="reference internal" href="../../../reference.html">API Reference</a></li>
273274
</ul>
274275

0 commit comments

Comments
 (0)