Skip to content

lexers/r: Match keywords prior to functions#860

Merged
alecthomas merged 1 commit intoalecthomas:masterfrom
heavywatal:lexers-r-keywords-above-function
Sep 25, 2023
Merged

lexers/r: Match keywords prior to functions#860
alecthomas merged 1 commit intoalecthomas:masterfrom
heavywatal:lexers-r-keywords-above-function

Conversation

@heavywatal
Copy link
Contributor

Keywords like function, for, if, and return followed by parentheses were recognized as NameFunction; others like in were recognized as normal Name. This PR moves the rule for keywords to the top.

The code tested with go run . in cmd/chromad:

printeven = function(n) {
  for (i in seq_len(n)) {
    if (i %% 2 == 0) {
      print(i)
    }
  }
  return(invisible(n))
}

the original result:

<pre class="chroma"><code><span class="line"><span class="cl"><span class="n">printeven</span> <span class="o">=</span> <span class="nf">function</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nf">for </span><span class="p">(</span><span class="n">i</span> <span class="n">in</span> <span class="nf">seq_len</span><span class="p">(</span><span class="n">n</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nf">if </span><span class="p">(</span><span class="n">i</span> <span class="o">%%</span> <span class="m">2</span> <span class="o">==</span> <span class="m">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nf">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nf">return</span><span class="p">(</span><span class="nf">invisible</span><span class="p">(</span><span class="n">n</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre>

this PR:

<pre class="chroma"><code><span class="line"><span class="cl"><span class="n">printeven</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="kr">for</span> <span class="p">(</span><span class="n">i</span> <span class="kr">in</span> <span class="nf">seq_len</span><span class="p">(</span><span class="n">n</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="kr">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">%%</span> <span class="m">2</span> <span class="o">==</span> <span class="m">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nf">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="kr">return</span><span class="p">(</span><span class="nf">invisible</span><span class="p">(</span><span class="n">n</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre>

@alecthomas alecthomas merged commit 7eb0305 into alecthomas:master Sep 25, 2023
@alecthomas
Copy link
Owner

Thanks!

@heavywatal heavywatal deleted the lexers-r-keywords-above-function branch September 25, 2023 09:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants