Absorb line commenting into LanguageMode

This commit is contained in:
Nathan Sobo
2012-06-13 15:36:35 -06:00
parent f1397db60b
commit 49e0e2095a
6 changed files with 24 additions and 50 deletions

View File

@@ -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')

View File

@@ -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 "// }"

View File

@@ -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()

View File

@@ -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 = []

View File

@@ -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)

View File

@@ -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