mirror of
https://github.com/atom/atom.git
synced 2026-01-23 22:08:08 -05:00
Move atom.tabText to a property on Editor.prototype for more locality
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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", ->
|
||||
|
||||
@@ -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})
|
||||
|
||||
|
||||
@@ -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: ->
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
@@ -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 })
|
||||
|
||||
|
||||
@@ -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 = {}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user