Skip to content

Commit 0bb4727

Browse files
committed
Add python-console.cson and python-traceback.cson for Atom compat
1 parent 992be43 commit 0bb4727

File tree

4 files changed

+189
-0
lines changed

4 files changed

+189
-0
lines changed

grammars/python-console.cson

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Copyright (c) 2014 GitHub Inc.
2+
3+
# Permission is hereby granted, free of charge, to any person obtaining
4+
# a copy of this software and associated documentation files (the
5+
# "Software"), to deal in the Software without restriction, including
6+
# without limitation the rights to use, copy, modify, merge, publish,
7+
# distribute, sublicense, and/or sell copies of the Software, and to
8+
# permit persons to whom the Software is furnished to do so, subject to
9+
# the following conditions:
10+
11+
# The above copyright notice and this permission notice shall be
12+
# included in all copies or substantial portions of the Software.
13+
14+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21+
22+
# --------------------------------------------------------------------
23+
24+
# This package was derived from a TextMate bundle located at
25+
# https://github.com/textmate/python.tmbundle and distributed under the following
26+
# license, located in `README.mdown`:
27+
28+
# Permission to copy, use, modify, sell and distribute this
29+
# software is granted. This software is provided "as is" without
30+
# express or implied warranty, and with no claim as to its
31+
# suitability for any purpose.
32+
33+
'scopeName': 'text.python.console'
34+
'name': 'Python Console'
35+
'fileTypes': [
36+
'doctest'
37+
'pycon'
38+
]
39+
'patterns': [
40+
{
41+
'match': '^(>{3}|\\.{3}|In \\[\\d+\\]:) (.+)$'
42+
'captures':
43+
'1':
44+
'name': 'punctuation.separator.prompt.python.console'
45+
'2':
46+
'patterns': [
47+
'include': 'source.python'
48+
]
49+
}
50+
]

grammars/python-traceback.cson

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Copyright (c) 2014 GitHub Inc.
2+
3+
# Permission is hereby granted, free of charge, to any person obtaining
4+
# a copy of this software and associated documentation files (the
5+
# "Software"), to deal in the Software without restriction, including
6+
# without limitation the rights to use, copy, modify, merge, publish,
7+
# distribute, sublicense, and/or sell copies of the Software, and to
8+
# permit persons to whom the Software is furnished to do so, subject to
9+
# the following conditions:
10+
11+
# The above copyright notice and this permission notice shall be
12+
# included in all copies or substantial portions of the Software.
13+
14+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21+
22+
# --------------------------------------------------------------------
23+
24+
# This package was derived from a TextMate bundle located at
25+
# https://github.com/textmate/python.tmbundle and distributed under the following
26+
# license, located in `README.mdown`:
27+
28+
# Permission to copy, use, modify, sell and distribute this
29+
# software is granted. This software is provided "as is" without
30+
# express or implied warranty, and with no claim as to its
31+
# suitability for any purpose.
32+
33+
'scopeName': 'text.python.traceback'
34+
'name': 'Python Traceback'
35+
'fileTypes': [
36+
'pytb'
37+
]
38+
'patterns': [
39+
{
40+
'match': '^ File ("[^"]+"), line (\\d+)(?:, in (.+))?$'
41+
'captures': {
42+
'1':
43+
'name': 'string.python.traceback'
44+
'2':
45+
'name': 'constant.numeric.python.traceback'
46+
'3':
47+
'name': 'entity.name.function.python.traceback'
48+
}
49+
}
50+
{
51+
'match': '^ (.+)$'
52+
'captures':
53+
'1':
54+
'patterns': [
55+
'include': 'source.python'
56+
]
57+
}
58+
{
59+
'match': '^([^\\s:]+):(?: (.+))?$'
60+
'captures':
61+
'1':
62+
'name': 'entity.name.type.class.python.traceback'
63+
'2':
64+
'name': 'string.python.traceback'
65+
}
66+
]

test/atom-spec/console-spec.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
describe("python-console tests", function() {
2+
var grammar = null;
3+
4+
beforeEach(function() {
5+
waitsForPromise(function() {
6+
return atom.packages.activatePackage("MagicPython")
7+
});
8+
runs(function() {
9+
grammar = atom.grammars.grammarForScopeName("text.python.console")
10+
});
11+
});
12+
13+
it("highlights >>>", function() {
14+
tokens = grammar.tokenizeLines(">>> print")
15+
16+
expect(tokens[0][0].value).toBe(">>>");
17+
expect(tokens[0][0].scopes).toEqual(
18+
['text.python.console', 'punctuation.separator.prompt.python.console']);
19+
20+
expect(tokens[0][1].value).toBe(" ");
21+
expect(tokens[0][1].scopes).toEqual(['text.python.console']);
22+
23+
expect(tokens[0][2].value).toBe("print");
24+
expect(tokens[0][2].scopes).toEqual(
25+
['text.python.console', 'support.function.builtin.python']);
26+
});
27+
});

test/atom-spec/tb-spec.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
describe("python-traceback tests", function() {
2+
var grammar = null;
3+
4+
beforeEach(function() {
5+
waitsForPromise(function() {
6+
return atom.packages.activatePackage("MagicPython")
7+
});
8+
runs(function() {
9+
grammar = atom.grammars.grammarForScopeName("text.python.traceback")
10+
});
11+
});
12+
13+
it("highlights a traceback line", function() {
14+
tokens = grammar.tokenizeLines(
15+
' File "t.py", line 1, in <module>\n' +
16+
' a = 1/0')
17+
18+
expect(tokens[0][0].value).toBe(" File ");
19+
expect(tokens[0][0].scopes).toEqual(['text.python.traceback']);
20+
21+
expect(tokens[0][1].value).toBe('"t.py"');
22+
expect(tokens[0][1].scopes).toEqual(
23+
['text.python.traceback', 'string.python.traceback']);
24+
25+
expect(tokens[0][2].value).toBe(", line ");
26+
expect(tokens[0][2].scopes).toEqual(['text.python.traceback']);
27+
28+
expect(tokens[0][3].value).toBe("1");
29+
expect(tokens[0][3].scopes).toEqual(
30+
['text.python.traceback', 'constant.numeric.python.traceback']);
31+
32+
expect(tokens[0][4].value).toBe(", in ");
33+
expect(tokens[0][4].scopes).toEqual(['text.python.traceback']);
34+
35+
expect(tokens[0][5].value).toBe("<module>");
36+
expect(tokens[0][5].scopes).toEqual(
37+
['text.python.traceback', 'entity.name.function.python.traceback']);
38+
39+
expect(tokens[1][1].value).toBe("a");
40+
expect(tokens[1][1].scopes).toEqual(['text.python.traceback']);
41+
42+
expect(tokens[1][3].value).toBe("=");
43+
expect(tokens[1][3].scopes).toEqual(
44+
['text.python.traceback', 'keyword.operator.assignment.python']);
45+
});
46+
});

0 commit comments

Comments
 (0)