From 49e0e2095ad8a440ad9a49667fa7384da24fb990 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 13 Jun 2012 15:36:35 -0600 Subject: [PATCH] Absorb line commenting into LanguageMode --- spec/app/language-mode-spec.coffee | 14 ++++++++++++++ spec/app/line-commenter-spec.coffee | 25 ------------------------- src/app/edit-session.coffee | 3 ++- src/app/language-mode.coffee | 9 ++++++++- src/app/line-commenter.coffee | 17 ----------------- src/app/renderer.coffee | 6 ------ 6 files changed, 24 insertions(+), 50 deletions(-) delete mode 100644 spec/app/line-commenter-spec.coffee delete mode 100644 src/app/line-commenter.coffee diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index 78c53d12e..b8e8366bd 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -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') diff --git a/spec/app/line-commenter-spec.coffee b/spec/app/line-commenter-spec.coffee deleted file mode 100644 index d9ce9e0cb..000000000 --- a/spec/app/line-commenter-spec.coffee +++ /dev/null @@ -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 "// }" diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 0651e6b3b..1813a7655 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -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() diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index 66c58ddce..a66669914 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -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 = [] diff --git a/src/app/line-commenter.coffee b/src/app/line-commenter.coffee deleted file mode 100644 index ea80cca7d..000000000 --- a/src/app/line-commenter.coffee +++ /dev/null @@ -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) diff --git a/src/app/renderer.coffee b/src/app/renderer.coffee index 79bc1c092..7c2298eee 100644 --- a/src/app/renderer.coffee +++ b/src/app/renderer.coffee @@ -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