Scope editor.tabLength

This commit is contained in:
Ben Ogle
2014-10-03 15:48:49 -07:00
parent 416898e278
commit 339cb02269
4 changed files with 34 additions and 18 deletions

View File

@@ -3038,6 +3038,25 @@ describe "TextEditor", ->
atom.workspace.open(null, softTabs: false).then (editor) ->
expect(editor.getSoftTabs()).toBeFalsy()
describe '.getTabLength(scopeDescriptor)', ->
describe 'when scoped settings are used', ->
coffeeEditor = null
beforeEach ->
waitsForPromise ->
atom.packages.activatePackage('language-coffee-script')
waitsForPromise ->
atom.project.open('coffee.coffee', autoIndent: false).then (o) -> coffeeEditor = o
it 'will return correct values based on the scope of the set grammars', ->
atom.config.set '.source.coffee', 'editor.tabLength', 6
atom.config.set '.source.coffee .class', 'editor.tabLength', 4
expect(editor.getTabLength()).toBe 2
expect(coffeeEditor.getTabLength()).toBe 6
coffeeEditor.setCursorBufferPosition [0, 10]
expect(coffeeEditor.getTabLength(coffeeEditor.scopesAtCursor())).toBe 4
describe ".indentLevelForLine(line)", ->
it "returns the indent level when the line has only leading whitespace", ->
expect(editor.indentLevelForLine(" hello")).toBe(2)

View File

@@ -396,8 +396,8 @@ class DisplayBuffer extends Model
# Retrieves the current tab length.
#
# Returns a {Number}.
getTabLength: ->
@tokenizedBuffer.getTabLength()
getTabLength: (scopeDescriptor) ->
@tokenizedBuffer.getTabLength(scopeDescriptor)
# Specifies the tab length.
#

View File

@@ -2173,12 +2173,16 @@ class TextEditor extends Model
# Essential: Get the on-screen length of tab characters.
#
# Returns a {Number}.
getTabLength: -> @displayBuffer.getTabLength()
# Essential: Set the on-screen length of tab characters.
# * `scopeDescriptor` (optional) {Array} of {String}s.
#
# * `tabLength` {Number} length of a single tab
# Returns a {Number}.
getTabLength: (scopeDescriptor) -> @displayBuffer.getTabLength(scopeDescriptor)
# Essential: Set the on-screen length of tab characters. Setting this to a
# {Number} This will override the `editor.tabLength` setting.
#
# * `tabLength` {Number} length of a single tab. Setting to `null` will
# fallback to using the `editor.tabLength` config setting
setTabLength: (tabLength) -> @displayBuffer.setTabLength(tabLength)
# Extended: Determine if the buffer uses hard or soft tabs.

View File

@@ -25,16 +25,14 @@ class TokenizedBuffer extends Model
constructor: ({@buffer, @tabLength, @invisibles}) ->
@emitter = new Emitter
@tabLength ?= atom.config.get('editor.tabLength')
@subscribe atom.syntax.onDidAddGrammar(@grammarAddedOrUpdated)
@subscribe atom.syntax.onDidUpdateGrammar(@grammarAddedOrUpdated)
@subscribe @buffer.onDidChange (e) => @handleBufferChange(e)
@subscribe @buffer.onDidChangePath (@bufferPath) => @reloadGrammar()
# TODO: FIXME: make this work for scoped properties
@subscribe @$tabLength.changes, (tabLength) => @retokenizeLines()
@subscribe atom.config.onDidChange 'editor.tabLength', ({newValue}) => @setTabLength(newValue)
@reloadGrammar()
@@ -81,6 +79,7 @@ class TokenizedBuffer extends Model
return if grammar is @grammar
@unsubscribe(@grammar) if @grammar
@grammar = grammar
@grammarScopeDescriptor = [@grammar.scopeName]
@currentGrammarScore = score ? grammar.getScore(@buffer.getPath(), @buffer.getText())
@subscribe @grammar.onDidUpdate => @retokenizeLines()
@retokenizeLines()
@@ -112,15 +111,9 @@ class TokenizedBuffer extends Model
setVisible: (@visible) ->
@tokenizeInBackground() if @visible
# Retrieves the current tab length.
#
# Returns a {Number}.
getTabLength: ->
@tabLength
getTabLength: (scopeDescriptor) ->
@tabLength ? atom.config.get(scopeDescriptor ? @grammarScopeDescriptor, 'editor.tabLength')
# Specifies the tab length.
#
# tabLength - A {Number} that defines the new tab length.
setTabLength: (@tabLength) ->
setInvisibles: (invisibles) ->