Skip to content

Commit

Permalink
(enh) simplify Python grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
joshgoebel committed May 8, 2021
1 parent 176f8d3 commit 952fa0a
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 33 deletions.
41 changes: 26 additions & 15 deletions src/languages/python.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Website: https://www.python.org
Category: common
*/

import { IDENT_RE } from '../lib/modes.js';
import * as regex from '../lib/regex.js';

export default function(hljs) {
Expand Down Expand Up @@ -375,28 +376,38 @@ export default function(hljs) {
STRING,
COMMENT_TYPE,
hljs.HASH_COMMENT_MODE,
{
match: [
/def/, /\s+/,
IDENT_RE
],
scope: {
1: "keyword",
3: "title.function"
},
contains: [ PARAMS ]
},
{
variants: [
{
className: 'function',
beginKeywords: 'def'
match: [
/class/, /\s+/,
IDENT_RE, /\s*/,
/\(\s*/, IDENT_RE,/\s*\)/
],
},
{
className: 'class',
beginKeywords: 'class'
match: [
/class/, /\s+/,
IDENT_RE
],
}
],
end: /:/,
illegal: /[${=;\n,]/,
contains: [
hljs.UNDERSCORE_TITLE_MODE,
PARAMS,
{
begin: /->/,
endsWithParent: true,
keywords: KEYWORDS
}
]
scope: {
1: "keyword",
3: "title.class",
6: "title.class.inherited",
}
},
{
className: 'meta',
Expand Down
2 changes: 1 addition & 1 deletion test/markup/python-repl/sample.expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ foo = 42"
<span class="hljs-meta">&gt;&gt;&gt;</span> <span class="language-python"><span class="hljs-string">&quot;&quot;&quot;</span></span>
<span class="hljs-meta">...</span> <span class="language-python"><span class="hljs-string">abc</span></span>
<span class="hljs-meta">...</span> <span class="language-python"><span class="hljs-string">&quot;&quot;&quot;</span></span>
<span class="hljs-meta">&gt;&gt;&gt;</span> <span class="language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test</span>():</span></span>
<span class="hljs-meta">&gt;&gt;&gt;</span> <span class="language-python"><span class="hljs-keyword">def</span> <span class="hljs-title function_">test</span>():</span>
<span class="hljs-meta">...</span> <span class="language-python"> <span class="hljs-keyword">pass</span></span>
<span class="hljs-meta">&gt;&gt;&gt;</span>
<span class="hljs-meta">&gt;&gt;&gt;</span>
16 changes: 8 additions & 8 deletions test/markup/python/decorators.expect.txt
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
<span class="hljs-meta">@foo</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">bar</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">bar</span>():
<span class="hljs-keyword">pass</span>

<span class="hljs-meta">@foo </span><span class="hljs-comment"># bar</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">baz</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">baz</span>():
<span class="hljs-keyword">pass</span>

<span class="hljs-meta">@foo.bar.baz</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">qux</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">qux</span>():
<span class="hljs-keyword">pass</span>

<span class="hljs-meta">@surround_with(<span class="hljs-params"><span class="hljs-string">&quot;#&quot;</span>, repeat=<span class="hljs-number">3</span></span>)</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">text</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">text</span>():
<span class="hljs-keyword">return</span> <span class="hljs-string">&quot;hi!&quot;</span>

<span class="hljs-meta">@py38.style</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">func</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">func</span>():
<span class="hljs-keyword">pass</span>

<span class="hljs-meta">@py[<span class="hljs-string">&quot;3.9&quot;</span>].style</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">func</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">func</span>():
<span class="hljs-keyword">pass</span>

<span class="hljs-meta">@py[<span class="hljs-number">3.9</span>].style</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">func</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">func</span>():
<span class="hljs-keyword">pass</span>

<span class="hljs-meta">@<span class="hljs-number">2</span> + <span class="hljs-number">2</span> == <span class="hljs-number">5</span></span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">func</span>():</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">func</span>():
<span class="hljs-keyword">pass</span>
8 changes: 4 additions & 4 deletions test/markup/python/function-header-comments.expect.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">foo</span>(<span class="hljs-params">
<span class="hljs-keyword">def</span> <span class="hljs-title function_">foo</span>(<span class="hljs-params">
bar, <span class="hljs-comment"># commment</span>
</span>):</span>
</span>):
<span class="hljs-keyword">pass</span>


<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Foo</span>(<span class="hljs-params">collections.namedtuple(<span class="hljs-params"><span class="hljs-string">&#x27;Test&#x27;</span></span>), (<span class="hljs-params">
<span class="hljs-keyword">class</span> <span class="hljs-title class_">Foo</span>(collections.namedtuple(<span class="hljs-string">&#x27;Test&#x27;</span>), (
<span class="hljs-string">&#x27;name&#x27;</span>, <span class="hljs-comment"># comment</span>
</span>)</span>):</span>
)):
<span class="hljs-keyword">pass</span>
2 changes: 1 addition & 1 deletion test/markup/python/function-header.expect.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span>(<span class="hljs-params">x: <span class="hljs-built_in">int</span>, *, y: <span class="hljs-built_in">bool</span> = <span class="hljs-literal">True</span></span>) -&gt; <span class="hljs-literal">None</span>:</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">f</span>(<span class="hljs-params">x: <span class="hljs-built_in">int</span>, *, y: <span class="hljs-built_in">bool</span> = <span class="hljs-literal">True</span></span>) -&gt; <span class="hljs-literal">None</span>:
<span class="hljs-keyword">pass</span>
4 changes: 2 additions & 2 deletions test/markup/python/keywords.expect.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Shorty</span>(<span class="hljs-params"><span class="hljs-built_in">dict</span></span>):</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">len</span>(<span class="hljs-params">self</span>):</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">Shorty</span>(<span class="hljs-title class_ inherited__">dict</span>):
<span class="hljs-keyword">def</span> <span class="hljs-title function_">len</span>(<span class="hljs-params">self</span>):
<span class="hljs-keyword">return</span> <span class="hljs-literal">NotImplemented</span>

x = Shorty()
Expand Down
4 changes: 2 additions & 2 deletions test/markup/python/matrix-multiplication.expect.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<span class="hljs-meta">@meta</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">C</span>:</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">C</span>:

<span class="hljs-meta"> @decorator</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span>(<span class="hljs-params">self, H, V, beta, r</span>):</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">f</span>(<span class="hljs-params">self, H, V, beta, r</span>):
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
<span class="hljs-keyword">return</span> S

0 comments on commit 952fa0a

Please sign in to comment.