diff --git a/spec/fixtures/packages/package-with-scoped-properties/scoped-properties/omg.cson b/spec/fixtures/packages/package-with-scoped-properties/scoped-properties/omg.cson index 3ae9a9739..f5c618498 100644 --- a/spec/fixtures/packages/package-with-scoped-properties/scoped-properties/omg.cson +++ b/spec/fixtures/packages/package-with-scoped-properties/scoped-properties/omg.cson @@ -1,5 +1,6 @@ '.source.omg': 'editor': 'increaseIndentPattern': '^a' + 'decreaseIndentPattern': '^z' 'commentStart': '/*' 'commentEnd': '*/' diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index f8d4af877..7049d3df7 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -369,7 +369,7 @@ describe "PackageManager", -> atom.packages.activatePackage("package-with-scoped-properties") runs -> - expect(atom.config.get ['.source.omg'], 'editor.increaseIndentPattern').toBe '^a' + expect(atom.config.get ['.source.omg'], 'editor.indent.increasePattern').toBe '^a' it "combines 'editor.commentStart' and 'editor.commentEnd' strings under the 'editor.comment' key path", -> if atom.packages.isPackageLoaded("package-with-scoped-properties") @@ -383,6 +383,18 @@ describe "PackageManager", -> expect(atom.config.get ['.source.omg'], 'editor.comment.end').toBe '*/' expect(Grim.deprecate).toHaveBeenCalled() + it "combines 'editor.increaseIndentPattern' and 'editor.decreaseIndentPattern' strings under the 'editor.indent' key path", -> + if atom.packages.isPackageLoaded("package-with-scoped-properties") + atom.packages.unloadPackage("package-with-scoped-properties") + + waitsForPromise -> + atom.packages.activatePackage("package-with-scoped-properties") + + runs -> + expect(atom.config.get ['.source.omg'], 'editor.indent.increasePattern').toBe '^a' + expect(atom.config.get ['.source.omg'], 'editor.indent.decreasePattern').toBe '^z' + expect(Grim.deprecate).toHaveBeenCalled() + describe "converted textmate packages", -> it "loads the package's grammars", -> expect(atom.grammars.selectGrammar("file.rb").name).toBe "Null Grammar" @@ -507,9 +519,9 @@ describe "PackageManager", -> atom.packages.activatePackage("package-with-scoped-properties") runs -> - expect(atom.config.get ['.source.omg'], 'editor.increaseIndentPattern').toBe '^a' + expect(atom.config.get ['.source.omg'], 'editor.indent.increasePattern').toBe '^a' atom.packages.deactivatePackage("package-with-scoped-properties") - expect(atom.config.get ['.source.omg'], 'editor.increaseIndentPattern').toBeUndefined() + expect(atom.config.get ['.source.omg'], 'editor.indent.increasePattern').toBeUndefined() describe "textmate packages", -> it "removes the package's grammars", -> diff --git a/src/config-schema.coffee b/src/config-schema.coffee index d71d763f4..2c26bf9e9 100644 --- a/src/config-schema.coffee +++ b/src/config-schema.coffee @@ -88,10 +88,13 @@ module.exports = type: ['string', 'null'] end: type: ['string', 'null'] - increaseIndentPattern: - type: ['string', 'null'] - decreaseIndentPattern: - type: ['string', 'null'] + indent: + type: 'object' + properties: + increasePattern: + type: ['string', 'null'] + decreasePattern: + type: ['string', 'null'] foldEndPattern: type: ['string', 'null'] diff --git a/src/language-mode.coffee b/src/language-mode.coffee index 75c020ea9..7ae8e76a1 100644 --- a/src/language-mode.coffee +++ b/src/language-mode.coffee @@ -249,7 +249,14 @@ class LanguageMode suggestedIndentForBufferRow: (bufferRow, options) -> currentIndentLevel = @editor.indentationForBufferRow(bufferRow) scopeDescriptor = @editor.scopeDescriptorForBufferPosition([bufferRow, 0]) - return currentIndentLevel unless increaseIndentRegex = @increaseIndentRegexForScopeDescriptor(scopeDescriptor) + + indentPatterns = atom.config.get(scopeDescriptor, 'editor.indent') + if indentPatterns?.increasePattern? + increaseIndentRegex = new OnigRegExp(indentPatterns.increasePattern) + if indentPatterns?.decreasePattern? + decreaseIndentRegex = new OnigRegExp(indentPatterns.decreasePattern) + + return currentIndentLevel unless increaseIndentRegex? currentLine = @buffer.lineForRow(bufferRow) if options?.skipBlankLines ? true @@ -263,7 +270,7 @@ class LanguageMode desiredIndentLevel = @editor.indentationForBufferRow(precedingRow) desiredIndentLevel += 1 if increaseIndentRegex.testSync(precedingLine) and not @editor.isBufferRowCommented(precedingRow) - return desiredIndentLevel unless decreaseIndentRegex = @decreaseIndentRegexForScopeDescriptor(scopeDescriptor) + return desiredIndentLevel unless decreaseIndentRegex? desiredIndentLevel -= 1 if decreaseIndentRegex.testSync(currentLine) Math.max(desiredIndentLevel, 0) @@ -299,8 +306,13 @@ class LanguageMode # bufferRow - The row {Number} autoDecreaseIndentForBufferRow: (bufferRow) -> scopeDescriptor = @editor.scopeDescriptorForBufferPosition([bufferRow, 0]) - increaseIndentRegex = @increaseIndentRegexForScopeDescriptor(scopeDescriptor) - decreaseIndentRegex = @decreaseIndentRegexForScopeDescriptor(scopeDescriptor) + + indentPatterns = atom.config.get(scopeDescriptor, 'editor.indent') + if indentPatterns?.increasePattern? + increaseIndentRegex = new OnigRegExp(indentPatterns.increasePattern) + if indentPatterns?.decreasePattern? + decreaseIndentRegex = new OnigRegExp(indentPatterns.decreasePattern) + return unless increaseIndentRegex and decreaseIndentRegex line = @buffer.lineForRow(bufferRow) @@ -321,11 +333,5 @@ class LanguageMode if pattern = atom.config.get(scopeDescriptor, property) new OnigRegExp(pattern) - increaseIndentRegexForScopeDescriptor: (scopeDescriptor) -> - @getRegexForProperty(scopeDescriptor, 'editor.increaseIndentPattern') - - decreaseIndentRegexForScopeDescriptor: (scopeDescriptor) -> - @getRegexForProperty(scopeDescriptor, 'editor.decreaseIndentPattern') - foldEndRegexForScopeDescriptor: (scopeDescriptor) -> @getRegexForProperty(scopeDescriptor, 'editor.foldEndPattern') diff --git a/src/scoped-properties.coffee b/src/scoped-properties.coffee index 5ec4e57ed..28749e23c 100644 --- a/src/scoped-properties.coffee +++ b/src/scoped-properties.coffee @@ -25,6 +25,18 @@ class ScopedProperties delete properties.editor.commentEnd Grim.deprecate("The 'editor.commentEnd' setting has been moved to 'editor.comment.end'. Please update `#{@path}`.") + if properties.editor?.increaseIndentPattern? + properties.editor.indent ?= {} + properties.editor.indent.increasePattern ?= properties.editor.increaseIndentPattern + delete properties.editor.increaseIndentPattern + Grim.deprecate("The 'editor.increaseIndentPattern' setting has been moved to 'editor.indent.increasePattern'. Please update `#{@path}`.") + + if properties.editor?.decreaseIndentPattern? + properties.editor.indent ?= {} + properties.editor.indent.decreasePattern ?= properties.editor.decreaseIndentPattern + delete properties.editor.decreaseIndentPattern + Grim.deprecate("The 'editor.decreaseIndentPattern' setting has been moved to 'editor.indent.decreasePattern'. Please update `#{@path}`.") + @propertyDisposable = new CompositeDisposable activate: ->