mirror of
https://github.com/atom/atom.git
synced 2026-01-24 06:18:03 -05:00
Absorb line commenting into LanguageMode
This commit is contained in:
@@ -14,6 +14,20 @@ describe "LanguageMode", ->
|
||||
it "returns the position of the matching bracket, skipping any nested brackets", ->
|
||||
expect(languageMode.findClosingBracket([1, 29])).toEqual [9, 2]
|
||||
|
||||
describe ".toggleLineCommentsInRange(range)", ->
|
||||
it "comments/uncomments lines in the given range", ->
|
||||
languageMode.toggleLineCommentsInRange([[4, 5], [7, 8]])
|
||||
expect(buffer.lineForRow(4)).toBe "// while(items.length > 0) {"
|
||||
expect(buffer.lineForRow(5)).toBe "// current = items.shift();"
|
||||
expect(buffer.lineForRow(6)).toBe "// current < pivot ? left.push(current) : right.push(current);"
|
||||
expect(buffer.lineForRow(7)).toBe "// }"
|
||||
|
||||
languageMode.toggleLineCommentsInRange([[4, 5], [5, 8]])
|
||||
expect(buffer.lineForRow(4)).toBe " while(items.length > 0) {"
|
||||
expect(buffer.lineForRow(5)).toBe " current = items.shift();"
|
||||
expect(buffer.lineForRow(6)).toBe "// current < pivot ? left.push(current) : right.push(current);"
|
||||
expect(buffer.lineForRow(7)).toBe "// }"
|
||||
|
||||
describe "tokenization", ->
|
||||
it "tokenizes all the lines in the buffer on construction", ->
|
||||
expect(languageMode.lineForScreenRow(0).tokens[0]).toEqual(type: 'keyword.definition', value: 'var')
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
Buffer = require 'buffer'
|
||||
LanguageMode = require 'language-mode'
|
||||
LineCommenter = require 'line-commenter'
|
||||
|
||||
describe "LineCommenter", ->
|
||||
[buffer, lineCommenter] = []
|
||||
|
||||
beforeEach ->
|
||||
buffer = new Buffer(require.resolve('fixtures/sample.js'))
|
||||
languageMode = new LanguageMode(buffer)
|
||||
lineCommenter = new LineCommenter(languageMode)
|
||||
|
||||
describe "toggleLineCommentsInRange", ->
|
||||
it "comments/uncomments lines in the given range", ->
|
||||
lineCommenter.toggleLineCommentsInRange([[4, 5], [7, 8]])
|
||||
expect(buffer.lineForRow(4)).toBe "// while(items.length > 0) {"
|
||||
expect(buffer.lineForRow(5)).toBe "// current = items.shift();"
|
||||
expect(buffer.lineForRow(6)).toBe "// current < pivot ? left.push(current) : right.push(current);"
|
||||
expect(buffer.lineForRow(7)).toBe "// }"
|
||||
|
||||
lineCommenter.toggleLineCommentsInRange([[4, 5], [5, 8]])
|
||||
expect(buffer.lineForRow(4)).toBe " while(items.length > 0) {"
|
||||
expect(buffer.lineForRow(5)).toBe " current = items.shift();"
|
||||
expect(buffer.lineForRow(6)).toBe "// current < pivot ? left.push(current) : right.push(current);"
|
||||
expect(buffer.lineForRow(7)).toBe "// }"
|
||||
@@ -35,6 +35,7 @@ class EditSession
|
||||
@id = @constructor.idCounter++
|
||||
@softTabs ?= true
|
||||
@renderer = new Renderer(@buffer, { softWrapColumn, @tabText })
|
||||
@languageMode = @renderer.languageMode
|
||||
@cursors = []
|
||||
@selections = []
|
||||
@addCursorAtScreenPosition([0, 0])
|
||||
@@ -210,7 +211,7 @@ class EditSession
|
||||
@lineForScreenRow(screenRow).fold?
|
||||
|
||||
toggleLineCommentsInRange: (range) ->
|
||||
@renderer.toggleLineCommentsInRange(range)
|
||||
@languageMode.toggleLineCommentsInRange(range)
|
||||
|
||||
mutateSelectedText: (fn) ->
|
||||
selections = @getSelections()
|
||||
|
||||
@@ -4,6 +4,7 @@ EventEmitter = require 'event-emitter'
|
||||
Token = require 'token'
|
||||
Range = require 'range'
|
||||
Point = require 'point'
|
||||
AceLineCommentAdaptor = require 'ace-line-comment-adaptor'
|
||||
|
||||
module.exports =
|
||||
class LanguageMode
|
||||
@@ -13,8 +14,14 @@ class LanguageMode
|
||||
|
||||
constructor: (@buffer, @tabText) ->
|
||||
@id = @constructor.idCounter++
|
||||
@aceMode = @buffer.getMode()
|
||||
@screenLines = @buildScreenLinesForRows('start', 0, @buffer.getLastRow())
|
||||
@buffer.on "change.languageMode#{@id}", (e) => @handleBufferChange(e)
|
||||
@lineCommentAdaptor = new AceLineCommentAdaptor(@buffer)
|
||||
|
||||
toggleLineCommentsInRange: (range) ->
|
||||
range = Range.fromObject(range)
|
||||
@aceMode.toggleCommentLines(@stateForRow(range.start.row), @lineCommentAdaptor, range.start.row, range.end.row)
|
||||
|
||||
handleBufferChange: (e) ->
|
||||
oldRange = e.oldRange.copy()
|
||||
@@ -55,7 +62,7 @@ class LanguageMode
|
||||
screenLine
|
||||
|
||||
buildScreenLineForRow: (state, row) ->
|
||||
tokenizer = @buffer.getMode().getTokenizer()
|
||||
tokenizer = @aceMode.getTokenizer()
|
||||
line = @buffer.lineForRow(row)
|
||||
{tokens, state} = tokenizer.getLineTokens(line, state)
|
||||
tokenObjects = []
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
Range = require 'range'
|
||||
AceLineCommentAdaptor = require 'ace-line-comment-adaptor'
|
||||
|
||||
module.exports =
|
||||
class LineCommenter
|
||||
languageMode: null
|
||||
buffer: null
|
||||
aceMode: null
|
||||
|
||||
constructor: (@languageMode) ->
|
||||
@buffer = @languageMode.buffer
|
||||
@aceMode = @buffer.getMode()
|
||||
@adaptor = new AceLineCommentAdaptor(@buffer)
|
||||
|
||||
toggleLineCommentsInRange: (range) ->
|
||||
range = Range.fromObject(range)
|
||||
@aceMode.toggleCommentLines(@languageMode.stateForRow(range.start.row), @adaptor, range.start.row, range.end.row)
|
||||
@@ -8,7 +8,6 @@ Range = require 'range'
|
||||
Fold = require 'fold'
|
||||
ScreenLine = require 'screen-line'
|
||||
Token = require 'token'
|
||||
LineCommenter = require 'line-commenter'
|
||||
|
||||
module.exports =
|
||||
class Renderer
|
||||
@@ -16,14 +15,12 @@ class Renderer
|
||||
lineMap: null
|
||||
languageMode: null
|
||||
activeFolds: null
|
||||
lineCommenter: null
|
||||
foldsById: null
|
||||
lastLanguageModeChangeEvent: null
|
||||
|
||||
constructor: (@buffer, options={}) ->
|
||||
@id = @constructor.idCounter++
|
||||
@languageMode = new LanguageMode(@buffer, options.tabText ? ' ')
|
||||
@lineCommenter = new LineCommenter(@languageMode)
|
||||
@foldSuggester = new FoldSuggester(@languageMode)
|
||||
@softWrapColumn = options.softWrapColumn ? Infinity
|
||||
@activeFolds = {}
|
||||
@@ -262,7 +259,4 @@ class Renderer
|
||||
logLines: (start, end) ->
|
||||
@lineMap.logLines(start, end)
|
||||
|
||||
toggleLineCommentsInRange: (range) ->
|
||||
@lineCommenter.toggleLineCommentsInRange(range)
|
||||
|
||||
_.extend Renderer.prototype, EventEmitter
|
||||
|
||||
Reference in New Issue
Block a user