Move atom.tabText to a property on Editor.prototype for more locality

This commit is contained in:
Nathan Sobo
2012-04-05 17:55:15 -06:00
parent aba968acd9
commit a3686da496
10 changed files with 31 additions and 28 deletions

View File

@@ -1623,8 +1623,8 @@ describe "Editor", ->
describe "tab", ->
describe "if editor.softTabs is true (the default)", ->
it "inserts atom.tabText into the buffer", ->
tabRegex = new RegExp("^#{atom.tabText}")
it "inserts editor.tabText into the buffer", ->
tabRegex = new RegExp("^#{editor.tabText}")
expect(buffer.lineForRow(0)).not.toMatch(tabRegex)
editor.trigger 'tab'
expect(buffer.lineForRow(0)).toMatch(tabRegex)

View File

@@ -139,18 +139,21 @@ describe "Highlighter", ->
expect(event.newRange).toEqual new Range([2, 0], [7, buffer.lineForRow(7).length])
describe "when the buffer contains tab characters", ->
beforeEach ->
buffer = new Buffer(require.resolve('fixtures/sample-with-tabs.coffee'))
highlighter = new Highlighter(buffer)
tabText = null
it "always renders each tab as its own atomic token containing atom.tabText", ->
beforeEach ->
tabText = ' '
buffer = new Buffer(require.resolve('fixtures/sample-with-tabs.coffee'))
highlighter = new Highlighter(buffer, tabText)
it "always renders each tab as its own atomic token containing tabText", ->
screenLine0 = highlighter.lineForScreenRow(0)
expect(screenLine0.text).toBe "# Econ 101#{atom.tabText}"
expect(screenLine0.text).toBe "# Econ 101#{tabText}"
{ tokens } = screenLine0
expect(tokens.length).toBe 2
expect(tokens[0].value).toBe "# Econ 101"
expect(tokens[1].value).toBe atom.tabText
expect(tokens[1].value).toBe tabText
expect(tokens[1].type).toBe tokens[0].type
expect(tokens[1].isAtomic).toBeTruthy()
expect(highlighter.lineForScreenRow(2).text).toBe "#{atom.tabText} buy()#{atom.tabText}while supply > demand"
expect(highlighter.lineForScreenRow(2).text).toBe "#{tabText} buy()#{tabText}while supply > demand"

View File

@@ -2,10 +2,11 @@ Renderer = require 'renderer'
Buffer = require 'buffer'
describe "Renderer", ->
[renderer, buffer, changeHandler] = []
[renderer, buffer, changeHandler, tabText] = []
beforeEach ->
tabText = ' '
buffer = new Buffer(require.resolve 'fixtures/sample.js')
renderer = new Renderer(buffer)
renderer = new Renderer(buffer, {tabText})
changeHandler = jasmine.createSpy 'changeHandler'
renderer.on 'change', changeHandler
@@ -608,7 +609,7 @@ describe "Renderer", ->
buffer.insert([0, 0], '\t')
expect(renderer.clipScreenPosition([0, 0])).toEqual [0, 0]
expect(renderer.clipScreenPosition([0, 1])).toEqual [0, 0]
expect(renderer.clipScreenPosition([0, atom.tabText.length])).toEqual [0, atom.tabText.length]
expect(renderer.clipScreenPosition([0, tabText.length])).toEqual [0, tabText.length]
describe "when skipAtomicTokens is true", ->
it "wraps the screen positions in the middle of fold placeholders to the end of the placeholder", ->
@@ -620,8 +621,8 @@ describe "Renderer", ->
it "clips screen positions in the middle of atomic tab characters to the beginning of the character", ->
buffer.insert([0, 0], '\t')
expect(renderer.clipScreenPosition([0, 0], skipAtomicTokens: true)).toEqual [0, 0]
expect(renderer.clipScreenPosition([0, 1], skipAtomicTokens: true)).toEqual [0, atom.tabText.length]
expect(renderer.clipScreenPosition([0, atom.tabText.length], skipAtomicTokens: true)).toEqual [0, atom.tabText.length]
expect(renderer.clipScreenPosition([0, 1], skipAtomicTokens: true)).toEqual [0, tabText.length]
expect(renderer.clipScreenPosition([0, tabText.length], skipAtomicTokens: true)).toEqual [0, tabText.length]
describe ".bufferRowsForScreenRows()", ->
it "returns the buffer rows corresponding to each screen row in the given range", ->

View File

@@ -15,7 +15,7 @@ class AceOutdentAdaptor
replace: (range, text) ->
{row, column} = @editor.getCursorBufferPosition()
start = range.start
end = {row: range.start.row, column: range.start.column + atom.tabText.length}
end = {row: range.start.row, column: range.start.column + @editor.tabText.length}
@buffer.change(new Range(start, end), "")
@editor.setCursorBufferPosition({row, column: column - atom.tabText.length})
@editor.setCursorBufferPosition({row, column: column - @editor.tabText.length})

View File

@@ -9,13 +9,11 @@ module.exports =
class Atom
keymap: null
windows: null
tabText: null
userConfigurationPath: null
constructor: (@loadPath, nativeMethods)->
@windows = []
@setUpKeymap()
@tabText = " "
@userConfigurationPath = fs.absolute "~/.atom/atom.coffee"
setUpKeymap: ->

View File

@@ -38,6 +38,7 @@ class Editor extends View
lineCache: null
isFocused: false
softTabs: true
tabText: ' '
initialize: ({buffer}) ->
requireStylesheet 'editor.css'
@@ -199,7 +200,7 @@ class Editor extends View
@trigger 'buffer-path-change'
@buffer.on "path-change.editor#{@id}", => @trigger 'buffer-path-change'
@renderer = new Renderer(@buffer, { maxLineLength: @calcMaxLineLength() })
@renderer = new Renderer(@buffer, { maxLineLength: @calcMaxLineLength(), tabText: @tabText })
@renderLines()
@gutter.renderLineNumbers()
@@ -409,7 +410,7 @@ class Editor extends View
insertTab: ->
if @softTabs
@compositeSelection.insertText(atom.tabText)
@compositeSelection.insertText(@tabText)
else
@compositeSelection.insertText('\t')

View File

@@ -9,7 +9,7 @@ class Highlighter
buffer: null
screenLines: []
constructor: (@buffer) ->
constructor: (@buffer, @tabText) ->
@id = @constructor.idCounter++
@screenLines = @buildLinesForScreenRows('start', 0, @buffer.getLastRow())
@buffer.on "change.highlighter#{@id}", (e) => @handleBufferChange(e)
@@ -59,7 +59,7 @@ class Highlighter
tokenObjects = []
for tokenProperties in tokens
token = new Token(tokenProperties)
tokenObjects.push(token.breakOutTabCharacters()...)
tokenObjects.push(token.breakOutTabCharacters(@tabText)...)
text = _.pluck(tokenObjects, 'value').join('')
new ScreenLineFragment(tokenObjects, text, [1, 0], [1, 0], { state })

View File

@@ -20,7 +20,7 @@ class Renderer
constructor: (@buffer, options={}) ->
@id = @constructor.idCounter++
@highlighter = new Highlighter(@buffer)
@highlighter = new Highlighter(@buffer, options.tabText ? ' ')
@maxLineLength = options.maxLineLength ? Infinity
@activeFolds = {}
@foldsById = {}

View File

@@ -111,7 +111,7 @@ class Selection extends View
row = @cursor.getScreenPosition().row
state = @editor.stateForScreenRow(row)
if text[0] == "\n"
indent = mode.getNextLineIndent(state, @cursor.getCurrentBufferLine(), atom.tabText)
indent = mode.getNextLineIndent(state, @cursor.getCurrentBufferLine(), @editor.tabText)
text = text[0] + indent + text[1..]
else if mode.checkOutdent(state, @cursor.getCurrentBufferLine(), text)
shouldOutdent = true

View File

@@ -14,12 +14,12 @@ class Token
value2 = @value.substring(splitIndex)
[new Token(value: value1, type: @type), new Token(value: value2, type: @type)]
breakOutTabCharacters: ->
breakOutTabCharacters: (tabText) ->
for substring in @value.match(/([^\t]+|\t)/g)
if substring == '\t'
@buildTabToken()
@buildTabToken(tabText)
else
new Token(value: substring, type: @type)
buildTabToken: ->
new Token(value: atom.tabText, type: @type, isAtomic: true)
buildTabToken: (tabText) ->
new Token(value: tabText, type: @type, isAtomic: true)