From 87c01e2d1c22d7530b53c5ab386f0a7c7c38e3cf Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Sat, 26 Mar 2016 20:05:04 -0500 Subject: [PATCH 1/5] 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 f0b7a478a87647d4c1371e93b397ff729f0804c7 Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Fri, 7 Jul 2017 00:06:02 -0500 Subject: [PATCH 2/5] Technically right regex, but triggers to soon to be useful This is the technically correct regex to prevent dedenting the current line on things like in-line else expressions, but unfortunately the regex is already matched before anything can be done about it :( Leaving it in as is in the hopes that it will be useful someday. --- 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.*$' From a039867ca58d68148e0e44ec73cd317c5ef791e9 Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Fri, 7 Jul 2017 00:12:33 -0500 Subject: [PATCH 3/5] Adding 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 08ba2c75608a7eda32a084e09a22aebfed127296 Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Fri, 7 Jul 2017 00:16:27 -0500 Subject: [PATCH 4/5] adding 'pass' as dedent keyword --- settings/language-python.cson | 2 +- spec/language-python-spec.coffee | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/settings/language-python.cson b/settings/language-python.cson index 003ced1..e6d1c09 100644 --- a/settings/language-python.cson +++ b/settings/language-python.cson @@ -6,4 +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.*:\\s*$' - 'decreaseNextIndentPattern': '^\\s*(return|yield|continue|break|raise)\\b.*$' + 'decreaseNextIndentPattern': '^\\s*(pass|return|yield|continue|break|raise)\\b.*$' diff --git a/spec/language-python-spec.coffee b/spec/language-python-spec.coffee index 3bf83fc..ba605bd 100644 --- a/spec/language-python-spec.coffee +++ b/spec/language-python-spec.coffee @@ -85,5 +85,6 @@ describe 'Python settings', -> expect(decreaseNextIndentRegex.testSync(' yield expression()')).toBeTruthy() expect(decreaseNextIndentRegex.testSync(' continue')).toBeTruthy() expect(decreaseNextIndentRegex.testSync(' break')).toBeTruthy() + expect(decreaseNextIndentRegex.testSync(' pass')).toBeTruthy() expect(decreaseNextIndentRegex.testSync(' raise')).toBeTruthy() expect(decreaseNextIndentRegex.testSync(' raise Exception()')).toBeTruthy() From 512e0a06abaa9e1b8c8951783365dfffdae2ce6a Mon Sep 17 00:00:00 2001 From: Kevin Rose Date: Wed, 12 Jul 2017 21:55:19 -0500 Subject: [PATCH 5/5] remove extra newline --- spec/language-python-spec.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/language-python-spec.coffee b/spec/language-python-spec.coffee index ba605bd..f3f0509 100644 --- a/spec/language-python-spec.coffee +++ b/spec/language-python-spec.coffee @@ -74,7 +74,6 @@ describe 'Python settings', -> expect(decreaseIndentRegex.testSync('else')).toBeFalsy() expect(decreaseIndentRegex.testSync(' "finally:"')).toBeFalsy() - it 'matches lines correctly using the decreaseNextIndentPattern', -> decreaseNextIndentRegex = languageMode.decreaseNextIndentRegexForScopeDescriptor(['source.python'])