From 87c01e2d1c22d7530b53c5ab386f0a7c7c38e3cf Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Sat, 26 Mar 2016 20:05:04 -0500 Subject: [PATCH 1/3] dedent next line for some keywords --- settings/language-python.cson | 1 + 1 file changed, 1 insertion(+) diff --git a/settings/language-python.cson b/settings/language-python.cson index 60e2aa7..7d26491 100644 --- a/settings/language-python.cson +++ b/settings/language-python.cson @@ -6,3 +6,4 @@ 'commentStart': '# ' 'increaseIndentPattern': '^\\s*(class|def|elif|else|except|finally|for|if|try|with|while)\\b.*:\\s*$' 'decreaseIndentPattern': '^\\s*(elif|else|except|finally)\\b.*:' + 'decreaseNextIndentPattern': '^\\s*(return|yield|continue|break|raise)\\b.*$' From 774cd51450b09477e8487d4205856fd9fb34b19a Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Thu, 6 Jul 2017 22:43:16 -0500 Subject: [PATCH 2/3] testing indent spec --- spec/language-python-spec.coffee | 89 ++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 spec/language-python-spec.coffee diff --git a/spec/language-python-spec.coffee b/spec/language-python-spec.coffee new file mode 100644 index 0000000..3bf83fc --- /dev/null +++ b/spec/language-python-spec.coffee @@ -0,0 +1,89 @@ +describe 'Python settings', -> + [editor, languageMode] = [] + + afterEach -> + editor.destroy() + + beforeEach -> + waitsForPromise -> + atom.workspace.open('sample.py').then (o) -> + editor = o + languageMode = editor.languageMode + + waitsForPromise -> + atom.packages.activatePackage('language-python') + + it 'matches lines correctly using the increaseIndentPattern', -> + increaseIndentRegex = languageMode.increaseIndentRegexForScopeDescriptor(['source.python']) + + expect(increaseIndentRegex.testSync('for i in range(n):')).toBeTruthy() + expect(increaseIndentRegex.testSync(' for i in range(n):')).toBeTruthy() + expect(increaseIndentRegex.testSync('class TheClass(Object):')).toBeTruthy() + expect(increaseIndentRegex.testSync(' class TheClass(Object):')).toBeTruthy() + expect(increaseIndentRegex.testSync('def f(x):')).toBeTruthy() + expect(increaseIndentRegex.testSync(' def f(x):')).toBeTruthy() + expect(increaseIndentRegex.testSync('if this_var == that_var:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' if this_var == that_var:')).toBeTruthy() + expect(increaseIndentRegex.testSync('elif this_var == that_var:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' elif this_var == that_var:')).toBeTruthy() + expect(increaseIndentRegex.testSync('else:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' else:')).toBeTruthy() + expect(increaseIndentRegex.testSync('except Exception:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' except Exception:')).toBeTruthy() + expect(increaseIndentRegex.testSync('except Exception as e:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' except Exception as e:')).toBeTruthy() + expect(increaseIndentRegex.testSync('finally:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' finally:')).toBeTruthy() + expect(increaseIndentRegex.testSync('with open("filename") as f:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' with open("filename") as f:')).toBeTruthy() + expect(increaseIndentRegex.testSync('while True:')).toBeTruthy() + expect(increaseIndentRegex.testSync(' while True:')).toBeTruthy() + expect(increaseIndentRegex.testSync('\t\t while True:')).toBeTruthy() + + it 'does not match lines incorrectly using the increaseIndentPattern', -> + increaseIndentRegex = languageMode.increaseIndentRegexForScopeDescriptor(['source.python']) + + expect(increaseIndentRegex.testSync('for i in range(n)')).toBeFalsy() + expect(increaseIndentRegex.testSync('class TheClass(Object)')).toBeFalsy() + expect(increaseIndentRegex.testSync('def f(x)')).toBeFalsy() + expect(increaseIndentRegex.testSync('if this_var == that_var')).toBeFalsy() + expect(increaseIndentRegex.testSync('"for i in range(n):"')).toBeFalsy() + + it 'matches lines correctly using the decreaseIndentPattern', -> + decreaseIndentRegex = languageMode.decreaseIndentRegexForScopeDescriptor(['source.python']) + + expect(decreaseIndentRegex.testSync('elif this_var == that_var:')).toBeTruthy() + expect(decreaseIndentRegex.testSync(' elif this_var == that_var:')).toBeTruthy() + expect(decreaseIndentRegex.testSync('else:')).toBeTruthy() + expect(decreaseIndentRegex.testSync(' else:')).toBeTruthy() + expect(decreaseIndentRegex.testSync('except Exception:')).toBeTruthy() + expect(decreaseIndentRegex.testSync(' except Exception:')).toBeTruthy() + expect(decreaseIndentRegex.testSync('except Exception as e:')).toBeTruthy() + expect(decreaseIndentRegex.testSync(' except Exception as e:')).toBeTruthy() + expect(decreaseIndentRegex.testSync('finally:')).toBeTruthy() + expect(decreaseIndentRegex.testSync(' finally:')).toBeTruthy() + expect(decreaseIndentRegex.testSync('\t\t finally:')).toBeTruthy() + + it 'does not match lines incorrectly using the decreaseIndentPattern', -> + decreaseIndentRegex = languageMode.decreaseIndentRegexForScopeDescriptor(['source.python']) + + # NOTE! This first one is different from most other rote tests here. + expect(decreaseIndentRegex.testSync('else: expression()')).toBeFalsy() + expect(decreaseIndentRegex.testSync('elif this_var == that_var')).toBeFalsy() + expect(decreaseIndentRegex.testSync(' elif this_var == that_var')).toBeFalsy() + expect(decreaseIndentRegex.testSync('else')).toBeFalsy() + expect(decreaseIndentRegex.testSync(' "finally:"')).toBeFalsy() + + + it 'matches lines correctly using the decreaseNextIndentPattern', -> + decreaseNextIndentRegex = languageMode.decreaseNextIndentRegexForScopeDescriptor(['source.python']) + + expect(decreaseNextIndentRegex.testSync(' return')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' return')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' return x')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' yield x')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' yield expression()')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' continue')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' break')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' raise')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' raise Exception()')).toBeTruthy() From 233e735ddc5ccdee82b984825dc153ff00e53d5d Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Thu, 6 Jul 2017 23:23:18 -0500 Subject: [PATCH 3/3] In line exprs with else-like constructs --- settings/language-python.cson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/language-python.cson b/settings/language-python.cson index 7d26491..003ced1 100644 --- a/settings/language-python.cson +++ b/settings/language-python.cson @@ -5,5 +5,5 @@ 'tabLength': 4 'commentStart': '# ' 'increaseIndentPattern': '^\\s*(class|def|elif|else|except|finally|for|if|try|with|while)\\b.*:\\s*$' - 'decreaseIndentPattern': '^\\s*(elif|else|except|finally)\\b.*:' + 'decreaseIndentPattern': '^\\s*(elif|else|except|finally)\\b.*:\\s*$' 'decreaseNextIndentPattern': '^\\s*(return|yield|continue|break|raise)\\b.*$'