diff --git a/spec/language-mode-spec.coffee b/spec/language-mode-spec.coffee index d8f545abe..158e0a078 100644 --- a/spec/language-mode-spec.coffee +++ b/spec/language-mode-spec.coffee @@ -107,7 +107,7 @@ describe "LanguageMode", -> expect(languageMode.suggestedIndentForBufferRow(11)).toBe 1 it "does not take invisibles into account", -> - atom.config.set('editor.showInvisibles', true) + editor.setShowInvisibles(true) expect(languageMode.suggestedIndentForBufferRow(0)).toBe 0 expect(languageMode.suggestedIndentForBufferRow(1)).toBe 1 expect(languageMode.suggestedIndentForBufferRow(2)).toBe 2 diff --git a/src/cursor.coffee b/src/cursor.coffee index 006801cf8..1176704c9 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -646,12 +646,7 @@ class Cursor extends Model ### getNonWordCharacters: -> - ( - @editor - .scopedSettingsDelegate - ?.getNonWordCharacters?(@getScopeDescriptor().getScopesArray()) ? - @editor.getNonWordCharacters() - ) + @editor.getNonWordCharacters(@getScopeDescriptor().getScopesArray()) changePosition: (options, fn) -> @clearSelection(autoscroll: false) diff --git a/src/language-mode.coffee b/src/language-mode.coffee index a0392acf6..2ffe57f19 100644 --- a/src/language-mode.coffee +++ b/src/language-mode.coffee @@ -8,7 +8,7 @@ class LanguageMode # Sets up a `LanguageMode` for the given {TextEditor}. # # editor - The {TextEditor} to associate with - constructor: (@editor, @config) -> + constructor: (@editor) -> {@buffer} = @editor @regexesByPattern = {} @@ -252,6 +252,7 @@ class LanguageMode iterator.next() scopeDescriptor = new ScopeDescriptor(scopes: iterator.getScopes()) + patterns = increaseIndentRegex = @increaseIndentRegexForScopeDescriptor(scopeDescriptor) decreaseIndentRegex = @decreaseIndentRegexForScopeDescriptor(scopeDescriptor) decreaseNextIndentRegex = @decreaseNextIndentRegexForScopeDescriptor(scopeDescriptor) @@ -331,27 +332,21 @@ class LanguageMode if desiredIndentLevel >= 0 and desiredIndentLevel < currentIndentLevel @editor.setIndentationForBufferRow(bufferRow, desiredIndentLevel) - getRegexForProperty: (scopeDescriptor, property) -> - if pattern = @config.get(property, scope: scopeDescriptor) + cacheRegex: (pattern) -> + if pattern @regexesByPattern[pattern] ?= new OnigRegExp(pattern) - @regexesByPattern[pattern] increaseIndentRegexForScopeDescriptor: (scopeDescriptor) -> - @getRegexForProperty(scopeDescriptor, 'editor.increaseIndentPattern') + @cacheRegex(@editor.getIncreaseIndentPattern(scopeDescriptor)) decreaseIndentRegexForScopeDescriptor: (scopeDescriptor) -> - @getRegexForProperty(scopeDescriptor, 'editor.decreaseIndentPattern') + @cacheRegex(@editor.getDecreaseIndentPattern(scopeDescriptor)) decreaseNextIndentRegexForScopeDescriptor: (scopeDescriptor) -> - @getRegexForProperty(scopeDescriptor, 'editor.decreaseNextIndentPattern') + @cacheRegex(@editor.getDecreaseNextIndentPattern(scopeDescriptor)) foldEndRegexForScopeDescriptor: (scopeDescriptor) -> - @getRegexForProperty(scopeDescriptor, 'editor.foldEndPattern') + @cacheRegex(@editor.getFoldEndPattern(scopeDescriptor)) commentStartAndEndStringsForScope: (scope) -> - commentStartEntry = @config.getAll('editor.commentStart', {scope})[0] - commentEndEntry = _.find @config.getAll('editor.commentEnd', {scope}), (entry) -> - entry.scopeSelector is commentStartEntry.scopeSelector - commentStartString = commentStartEntry?.value - commentEndString = commentEndEntry?.value - {commentStartString, commentEndString} + @editor.getCommentStrings(scope) diff --git a/src/text-editor-registry.js b/src/text-editor-registry.js index af0d2059a..1ce158b9b 100644 --- a/src/text-editor-registry.js +++ b/src/text-editor-registry.js @@ -177,4 +177,33 @@ class ScopedSettingsDelegate { getNonWordCharacters(scope) { return this.config.get('editor.nonWordCharacters', {scope: scope}) } + + getIncreaseIndentPattern (scope) { + return this.config.get('editor.increaseIndentPattern', {scope: scope}) + } + + getDecreaseIndentPattern (scope) { + return this.config.get('editor.decreaseIndentPattern', {scope: scope}) + } + + getDecreaseNextIndentPattern (scope) { + return this.config.get('editor.decreaseNextIndentPattern', {scope: scope}) + } + + getFoldEndPattern (scope) { + return this.config.get('editor.foldEndPattern', {scope: scope}) + } + + getCommentStrings (scope) { + const commentStartEntries = this.config.getAll('editor.commentStart', {scope}) + const commentEndEntries = this.config.getAll('editor.commentEnd', {scope}) + const commentStartEntry = commentStartEntries[0] + const commentEndEntry = commentEndEntries.find(entry => { + return entry.scopeSelector === commentStartEntry.scopeSelector + }) + return { + commentStartString: commentStartEntry && commentStartEntry.value, + commentEndString: commentEndEntry && commentEndEntry.value, + } + } } diff --git a/src/text-editor.coffee b/src/text-editor.coffee index c9b2e19cf..67b7b256f 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -181,7 +181,7 @@ class TextEditor extends Model initialColumn = Math.max(parseInt(initialColumn) or 0, 0) @addCursorAtBufferPosition([initialLine, initialColumn]) - @languageMode = new LanguageMode(this, @config) + @languageMode = new LanguageMode(this) @gutterContainer = new GutterContainer(this) @lineNumberGutter = @gutterContainer.addGutter @@ -3351,7 +3351,23 @@ class TextEditor extends Model setNonWordCharacters: (@nonWordCharacters) -> - getNonWordCharacters: -> @nonWordCharacters + getNonWordCharacters: (scopes) -> + (scopes and @scopedSettingsDelegate?.getNonWordCharacters?(scopes)) ? @nonWordCharacters + + getCommentStrings: (scopes) -> + (scopes and @scopedSettingsDelegate?.getCommentStrings?(scopes)) ? @commentStrings + + getIncreaseIndentPattern: (scopes) -> + (scopes and @scopedSettingsDelegate?.getIncreaseIndentPattern?(scopes)) ? @increaseIndentPattern + + getDecreaseIndentPattern: (scopes) -> + (scopes and @scopedSettingsDelegate?.getDecreaseIndentPattern?(scopes)) ? @decreaseIndentPattern + + getDecreaseNextIndentPattern: (scopes) -> + (scopes and @scopedSettingsDelegate?.getDecreaseNextIndentPattern?(scopes)) ? @decreaseNextIndentPattern + + getFoldEndPattern: (scopes) -> + (scopes and @scopedSettingsDelegate?.getFoldEndPattern?(scopes)) ? @foldEndPattern ### Section: Event Handlers