From f1397db60b91e531ba1f2ca2c96085d8c0209e09 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 13 Jun 2012 15:21:27 -0600 Subject: [PATCH] Rename Highlighter -> LanguageMode --- spec/app/fold-suggester-spec.coffee | 10 +- spec/app/highlighter-spec.coffee | 165 ------------------ spec/app/language-mode-spec.coffee | 165 ++++++++++++++++++ spec/app/line-commenter-spec.coffee | 6 +- spec/app/line-map-spec.coffee | 8 +- spec/app/screen-line-spec.coffee | 12 +- src/app/ace-fold-adaptor.coffee | 6 +- src/app/fold-suggester.coffee | 6 +- ...ighlighter.coffee => language-mode.coffee} | 8 +- src/app/line-commenter.coffee | 8 +- src/app/renderer.coffee | 24 +-- 11 files changed, 209 insertions(+), 209 deletions(-) delete mode 100644 spec/app/highlighter-spec.coffee create mode 100644 spec/app/language-mode-spec.coffee rename src/app/{highlighter.coffee => language-mode.coffee} (95%) diff --git a/spec/app/fold-suggester-spec.coffee b/spec/app/fold-suggester-spec.coffee index 88e01f523..43ca8efe4 100644 --- a/spec/app/fold-suggester-spec.coffee +++ b/spec/app/fold-suggester-spec.coffee @@ -1,6 +1,6 @@ FoldSuggester = require 'fold-suggester' Buffer = require 'buffer' -Highlighter = require 'highlighter' +LanguageMode = require 'language-mode' describe "FoldSuggester", -> foldSuggester = null @@ -8,8 +8,8 @@ describe "FoldSuggester", -> describe "javascript", -> beforeEach -> buffer = new Buffer(require.resolve 'fixtures/sample.js') - highlighter = new Highlighter(buffer) - foldSuggester = new FoldSuggester(highlighter) + languageMode = new LanguageMode(buffer) + foldSuggester = new FoldSuggester(languageMode) describe ".isBufferRowFoldable(bufferRow)", -> it "returns true only when the buffer row starts a foldable region", -> @@ -28,8 +28,8 @@ describe "FoldSuggester", -> describe "coffeescript", -> beforeEach -> buffer = new Buffer(require.resolve 'fixtures/coffee.coffee') - highlighter = new Highlighter(buffer) - foldSuggester = new FoldSuggester(highlighter) + languageMode = new LanguageMode(buffer) + foldSuggester = new FoldSuggester(languageMode) describe ".isBufferRowFoldable(bufferRow)", -> it "returns true only when the buffer row starts a foldable region", -> diff --git a/spec/app/highlighter-spec.coffee b/spec/app/highlighter-spec.coffee deleted file mode 100644 index 8677dcc25..000000000 --- a/spec/app/highlighter-spec.coffee +++ /dev/null @@ -1,165 +0,0 @@ -Highlighter = require 'highlighter' -Buffer = require 'buffer' -Range = require 'range' - -describe "Highlighter", -> - [highlighter, buffer] = [] - - beforeEach -> - buffer = new Buffer(require.resolve('fixtures/sample.js')) - highlighter = new Highlighter(buffer) - - describe "constructor", -> - it "tokenizes all the lines in the buffer", -> - expect(highlighter.lineForScreenRow(0).tokens[0]).toEqual(type: 'keyword.definition', value: 'var') - expect(highlighter.lineForScreenRow(11).tokens[1]).toEqual(type: 'keyword', value: 'return') - - describe "when the buffer changes", -> - changeHandler = null - - beforeEach -> - changeHandler = jasmine.createSpy('changeHandler') - highlighter.on "change", changeHandler - - describe "when lines are updated, but none are added or removed", -> - it "updates tokens for each of the changed lines", -> - range = new Range([0, 0], [2, 0]) - buffer.change(range, "foo()\nbar()\n") - - expect(highlighter.lineForScreenRow(0).tokens[0]).toEqual(type: 'identifier', value: 'foo') - expect(highlighter.lineForScreenRow(1).tokens[0]).toEqual(type: 'identifier', value: 'bar') - - # line 2 is unchanged - expect(highlighter.lineForScreenRow(2).tokens[1]).toEqual(type: 'keyword', value: 'if') - - expect(changeHandler).toHaveBeenCalled() - [event] = changeHandler.argsForCall[0] - - expect(event.oldRange).toEqual range - expect(event.newRange).toEqual new Range([0, 0], [2,0]) - - it "updates tokens for lines beyond the changed lines if needed", -> - buffer.insert([5, 30], '/* */') - changeHandler.reset() - - buffer.insert([2, 0], '/*') - expect(highlighter.lineForScreenRow(3).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(4).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(5).tokens[0].type).toBe 'comment' - - expect(changeHandler).toHaveBeenCalled() - [event] = changeHandler.argsForCall[0] - expect(event.oldRange).toEqual new Range([2, 0], [5, buffer.lineForRow(5).length]) - expect(event.newRange).toEqual new Range([2, 0], [5, buffer.lineForRow(5).length]) - - it "resumes highlighting with the state of the previous line", -> - buffer.insert([0, 0], '/*') - buffer.insert([5, 0], '*/') - - buffer.insert([1, 0], 'var ') - expect(highlighter.lineForScreenRow(1).tokens[0].type).toBe 'comment' - - describe "when lines are both updated and removed", -> - it "updates tokens to reflect the removed lines", -> - range = new Range([1, 0], [3, 0]) - buffer.change(range, "foo()") - - # previous line 0 remains - expect(highlighter.lineForScreenRow(0).tokens[0]).toEqual(type: 'keyword.definition', value: 'var') - - # previous line 3 should be combined with input to form line 1 - expect(highlighter.lineForScreenRow(1).tokens[0]).toEqual(type: 'identifier', value: 'foo') - expect(highlighter.lineForScreenRow(1).tokens[6]).toEqual(type: 'identifier', value: 'pivot') - - # lines below deleted regions should be shifted upward - expect(highlighter.lineForScreenRow(2).tokens[1]).toEqual(type: 'keyword', value: 'while') - expect(highlighter.lineForScreenRow(3).tokens[1]).toEqual(type: 'identifier', value: 'current') - expect(highlighter.lineForScreenRow(4).tokens[3]).toEqual(type: 'keyword.operator', value: '<') - - expect(changeHandler).toHaveBeenCalled() - [event] = changeHandler.argsForCall[0] - expect(event.oldRange).toEqual range - expect(event.newRange).toEqual new Range([1, 0], [1, 5]) - - it "updates tokens for lines beyond the changed lines if needed", -> - buffer.insert([5, 30], '/* */') - changeHandler.reset() - - buffer.change(new Range([2, 0], [3, 0]), '/*') - expect(highlighter.lineForScreenRow(2).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(3).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(4).tokens[0].type).toBe 'comment' - - expect(changeHandler).toHaveBeenCalled() - [event] = changeHandler.argsForCall[0] - expect(event.oldRange).toEqual new Range([2, 0], [5, buffer.lineForRow(4).length]) - expect(event.newRange).toEqual new Range([2, 0], [4, buffer.lineForRow(4).length]) - - describe "when lines are both updated and inserted", -> - it "updates tokens to reflect the inserted lines", -> - range = new Range([1, 0], [2, 0]) - buffer.change(range, "foo()\nbar()\nbaz()\nquux()") - - # previous line 0 remains - expect(highlighter.lineForScreenRow(0).tokens[0]).toEqual(type: 'keyword.definition', value: 'var') - - # 3 new lines inserted - expect(highlighter.lineForScreenRow(1).tokens[0]).toEqual(type: 'identifier', value: 'foo') - expect(highlighter.lineForScreenRow(2).tokens[0]).toEqual(type: 'identifier', value: 'bar') - expect(highlighter.lineForScreenRow(3).tokens[0]).toEqual(type: 'identifier', value: 'baz') - - # previous line 2 is joined with quux() on line 4 - expect(highlighter.lineForScreenRow(4).tokens[0]).toEqual(type: 'identifier', value: 'quux') - expect(highlighter.lineForScreenRow(4).tokens[4]).toEqual(type: 'keyword', value: 'if') - - # previous line 3 is pushed down to become line 5 - expect(highlighter.lineForScreenRow(5).tokens[3]).toEqual(type: 'identifier', value: 'pivot') - - expect(changeHandler).toHaveBeenCalled() - [event] = changeHandler.argsForCall[0] - expect(event.oldRange).toEqual range - expect(event.newRange).toEqual new Range([1, 0], [4, 6]) - - it "updates tokens for lines beyond the changed lines if needed", -> - buffer.insert([5, 30], '/* */') - changeHandler.reset() - - buffer.insert([2, 0], '/*\nabcde\nabcder') - expect(highlighter.lineForScreenRow(2).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(3).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(4).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(5).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(6).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(7).tokens[0].type).toBe 'comment' - expect(highlighter.lineForScreenRow(8).tokens[0].type).not.toBe 'comment' - - expect(changeHandler).toHaveBeenCalled() - [event] = changeHandler.argsForCall[0] - expect(event.oldRange).toEqual new Range([2, 0], [5, buffer.lineForRow(7).length]) - expect(event.newRange).toEqual new Range([2, 0], [7, buffer.lineForRow(7).length]) - - describe "when the buffer contains tab characters", -> - tabText = null - - 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#{tabText}" - { tokens } = screenLine0 - expect(tokens.length).toBe 2 - expect(tokens[0].value).toBe "# Econ 101" - 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 "#{tabText} buy()#{tabText}while supply > demand" - - describe ".findClosingBracket(startBracketPosition)", -> - describe "when called with a bracket type of '{'", -> - it "returns the position of the matching bracket, skipping any nested brackets", -> - expect(highlighter.findClosingBracket([1, 29])).toEqual [9, 2] - diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee new file mode 100644 index 000000000..78c53d12e --- /dev/null +++ b/spec/app/language-mode-spec.coffee @@ -0,0 +1,165 @@ +LanguageMode = require 'language-mode' +Buffer = require 'buffer' +Range = require 'range' + +describe "LanguageMode", -> + [languageMode, buffer] = [] + + beforeEach -> + buffer = new Buffer(require.resolve('fixtures/sample.js')) + languageMode = new LanguageMode(buffer) + + describe ".findClosingBracket(startBracketPosition)", -> + describe "when called with a bracket type of '{'", -> + it "returns the position of the matching bracket, skipping any nested brackets", -> + expect(languageMode.findClosingBracket([1, 29])).toEqual [9, 2] + + describe "tokenization", -> + it "tokenizes all the lines in the buffer on construction", -> + expect(languageMode.lineForScreenRow(0).tokens[0]).toEqual(type: 'keyword.definition', value: 'var') + expect(languageMode.lineForScreenRow(11).tokens[1]).toEqual(type: 'keyword', value: 'return') + + describe "when the buffer changes", -> + changeHandler = null + + beforeEach -> + changeHandler = jasmine.createSpy('changeHandler') + languageMode.on "change", changeHandler + + describe "when lines are updated, but none are added or removed", -> + it "updates tokens for each of the changed lines", -> + range = new Range([0, 0], [2, 0]) + buffer.change(range, "foo()\nbar()\n") + + expect(languageMode.lineForScreenRow(0).tokens[0]).toEqual(type: 'identifier', value: 'foo') + expect(languageMode.lineForScreenRow(1).tokens[0]).toEqual(type: 'identifier', value: 'bar') + + # line 2 is unchanged + expect(languageMode.lineForScreenRow(2).tokens[1]).toEqual(type: 'keyword', value: 'if') + + expect(changeHandler).toHaveBeenCalled() + [event] = changeHandler.argsForCall[0] + + expect(event.oldRange).toEqual range + expect(event.newRange).toEqual new Range([0, 0], [2,0]) + + it "updates tokens for lines beyond the changed lines if needed", -> + buffer.insert([5, 30], '/* */') + changeHandler.reset() + + buffer.insert([2, 0], '/*') + expect(languageMode.lineForScreenRow(3).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(4).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(5).tokens[0].type).toBe 'comment' + + expect(changeHandler).toHaveBeenCalled() + [event] = changeHandler.argsForCall[0] + expect(event.oldRange).toEqual new Range([2, 0], [5, buffer.lineForRow(5).length]) + expect(event.newRange).toEqual new Range([2, 0], [5, buffer.lineForRow(5).length]) + + it "resumes highlighting with the state of the previous line", -> + buffer.insert([0, 0], '/*') + buffer.insert([5, 0], '*/') + + buffer.insert([1, 0], 'var ') + expect(languageMode.lineForScreenRow(1).tokens[0].type).toBe 'comment' + + describe "when lines are both updated and removed", -> + it "updates tokens to reflect the removed lines", -> + range = new Range([1, 0], [3, 0]) + buffer.change(range, "foo()") + + # previous line 0 remains + expect(languageMode.lineForScreenRow(0).tokens[0]).toEqual(type: 'keyword.definition', value: 'var') + + # previous line 3 should be combined with input to form line 1 + expect(languageMode.lineForScreenRow(1).tokens[0]).toEqual(type: 'identifier', value: 'foo') + expect(languageMode.lineForScreenRow(1).tokens[6]).toEqual(type: 'identifier', value: 'pivot') + + # lines below deleted regions should be shifted upward + expect(languageMode.lineForScreenRow(2).tokens[1]).toEqual(type: 'keyword', value: 'while') + expect(languageMode.lineForScreenRow(3).tokens[1]).toEqual(type: 'identifier', value: 'current') + expect(languageMode.lineForScreenRow(4).tokens[3]).toEqual(type: 'keyword.operator', value: '<') + + expect(changeHandler).toHaveBeenCalled() + [event] = changeHandler.argsForCall[0] + expect(event.oldRange).toEqual range + expect(event.newRange).toEqual new Range([1, 0], [1, 5]) + + it "updates tokens for lines beyond the changed lines if needed", -> + buffer.insert([5, 30], '/* */') + changeHandler.reset() + + buffer.change(new Range([2, 0], [3, 0]), '/*') + expect(languageMode.lineForScreenRow(2).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(3).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(4).tokens[0].type).toBe 'comment' + + expect(changeHandler).toHaveBeenCalled() + [event] = changeHandler.argsForCall[0] + expect(event.oldRange).toEqual new Range([2, 0], [5, buffer.lineForRow(4).length]) + expect(event.newRange).toEqual new Range([2, 0], [4, buffer.lineForRow(4).length]) + + describe "when lines are both updated and inserted", -> + it "updates tokens to reflect the inserted lines", -> + range = new Range([1, 0], [2, 0]) + buffer.change(range, "foo()\nbar()\nbaz()\nquux()") + + # previous line 0 remains + expect(languageMode.lineForScreenRow(0).tokens[0]).toEqual(type: 'keyword.definition', value: 'var') + + # 3 new lines inserted + expect(languageMode.lineForScreenRow(1).tokens[0]).toEqual(type: 'identifier', value: 'foo') + expect(languageMode.lineForScreenRow(2).tokens[0]).toEqual(type: 'identifier', value: 'bar') + expect(languageMode.lineForScreenRow(3).tokens[0]).toEqual(type: 'identifier', value: 'baz') + + # previous line 2 is joined with quux() on line 4 + expect(languageMode.lineForScreenRow(4).tokens[0]).toEqual(type: 'identifier', value: 'quux') + expect(languageMode.lineForScreenRow(4).tokens[4]).toEqual(type: 'keyword', value: 'if') + + # previous line 3 is pushed down to become line 5 + expect(languageMode.lineForScreenRow(5).tokens[3]).toEqual(type: 'identifier', value: 'pivot') + + expect(changeHandler).toHaveBeenCalled() + [event] = changeHandler.argsForCall[0] + expect(event.oldRange).toEqual range + expect(event.newRange).toEqual new Range([1, 0], [4, 6]) + + it "updates tokens for lines beyond the changed lines if needed", -> + buffer.insert([5, 30], '/* */') + changeHandler.reset() + + buffer.insert([2, 0], '/*\nabcde\nabcder') + expect(languageMode.lineForScreenRow(2).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(3).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(4).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(5).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(6).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(7).tokens[0].type).toBe 'comment' + expect(languageMode.lineForScreenRow(8).tokens[0].type).not.toBe 'comment' + + expect(changeHandler).toHaveBeenCalled() + [event] = changeHandler.argsForCall[0] + expect(event.oldRange).toEqual new Range([2, 0], [5, buffer.lineForRow(7).length]) + expect(event.newRange).toEqual new Range([2, 0], [7, buffer.lineForRow(7).length]) + + describe "when the buffer contains tab characters", -> + tabText = null + + beforeEach -> + tabText = ' ' + buffer = new Buffer(require.resolve('fixtures/sample-with-tabs.coffee')) + languageMode = new LanguageMode(buffer, tabText) + + it "always renders each tab as its own atomic token containing tabText", -> + screenLine0 = languageMode.lineForScreenRow(0) + 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 tabText + expect(tokens[1].type).toBe tokens[0].type + expect(tokens[1].isAtomic).toBeTruthy() + + expect(languageMode.lineForScreenRow(2).text).toBe "#{tabText} buy()#{tabText}while supply > demand" + diff --git a/spec/app/line-commenter-spec.coffee b/spec/app/line-commenter-spec.coffee index da0000dd0..d9ce9e0cb 100644 --- a/spec/app/line-commenter-spec.coffee +++ b/spec/app/line-commenter-spec.coffee @@ -1,5 +1,5 @@ Buffer = require 'buffer' -Highlighter = require 'highlighter' +LanguageMode = require 'language-mode' LineCommenter = require 'line-commenter' describe "LineCommenter", -> @@ -7,8 +7,8 @@ describe "LineCommenter", -> beforeEach -> buffer = new Buffer(require.resolve('fixtures/sample.js')) - highlighter = new Highlighter(buffer) - lineCommenter = new LineCommenter(highlighter) + languageMode = new LanguageMode(buffer) + lineCommenter = new LineCommenter(languageMode) describe "toggleLineCommentsInRange", -> it "comments/uncomments lines in the given range", -> diff --git a/spec/app/line-map-spec.coffee b/spec/app/line-map-spec.coffee index 960ab5dbb..2f8cf8853 100644 --- a/spec/app/line-map-spec.coffee +++ b/spec/app/line-map-spec.coffee @@ -1,18 +1,18 @@ LineMap = require 'line-map' ScreenLine = require 'screen-line' Buffer = require 'buffer' -Highlighter = require 'highlighter' +LanguageMode = require 'language-mode' Point = require 'point' describe "LineMap", -> - [highlighter, map] = [] + [languageMode, map] = [] [line0, line1, line2, line3, line4] = [] beforeEach -> buffer = new Buffer(require.resolve 'fixtures/sample.js') - highlighter = new Highlighter(buffer) + languageMode = new LanguageMode(buffer) map = new LineMap - [line0, line1, line2, line3, line4] = highlighter.screenLinesForRows(0, 4) + [line0, line1, line2, line3, line4] = languageMode.screenLinesForRows(0, 4) describe ".insertAtBufferRow(row, lineFragments)", -> it "inserts the given line fragments before the specified buffer row", -> diff --git a/spec/app/screen-line-spec.coffee b/spec/app/screen-line-spec.coffee index af884555e..0c62eea37 100644 --- a/spec/app/screen-line-spec.coffee +++ b/spec/app/screen-line-spec.coffee @@ -1,15 +1,15 @@ _ = require 'underscore' Buffer = require 'buffer' -Highlighter = require 'highlighter' +LanguageMode = require 'language-mode' describe "ScreenLine", -> - [buffer, tabText, screenLine, highlighter] = [] + [buffer, tabText, screenLine, languageMode] = [] beforeEach -> tabText = ' ' buffer = new Buffer(require.resolve 'fixtures/sample.js') - highlighter = new Highlighter(buffer, tabText) - screenLine = highlighter.lineForScreenRow(3) + languageMode = new LanguageMode(buffer, tabText) + screenLine = languageMode.lineForScreenRow(3) describe ".splitAt(column)", -> it "breaks the line fragment into two fragments", -> @@ -70,7 +70,7 @@ describe "ScreenLine", -> [left, right] = screenLine.splitAt(14) expect(left.concat(right)).toEqual screenLine - concatenated = screenLine.concat(highlighter.lineForScreenRow(4)) + concatenated = screenLine.concat(languageMode.lineForScreenRow(4)) expect(concatenated.text).toBe ' var pivot = items.shift(), current, left = [], right = []; while(items.length > 0) {' expect(tokensText concatenated.tokens).toBe concatenated.text expect(concatenated.screenDelta).toEqual [2, 0] @@ -80,7 +80,7 @@ describe "ScreenLine", -> beforeEach -> buffer.insert([0, 13], '\t') buffer.insert([0, 0], '\t\t') - screenLine = highlighter.lineForScreenRow(0) + screenLine = languageMode.lineForScreenRow(0) describe "when translating from buffer to screen coordinates", -> it "accounts for tab characters being wider on screen", -> diff --git a/src/app/ace-fold-adaptor.coffee b/src/app/ace-fold-adaptor.coffee index 0ddb35f21..62c12c7c9 100644 --- a/src/app/ace-fold-adaptor.coffee +++ b/src/app/ace-fold-adaptor.coffee @@ -2,8 +2,8 @@ module.exports = class AceFoldAdaptor foldWidgets: {} - constructor: (@highlighter) -> - @buffer = @highlighter.buffer + constructor: (@languageMode) -> + @buffer = @languageMode.buffer getLine: (bufferRow) -> @buffer.lineForRow(bufferRow) @@ -12,5 +12,5 @@ class AceFoldAdaptor @buffer.getLineCount() $findClosingBracket: (bracketType, bufferPosition) -> - @highlighter.findClosingBracket([bufferPosition.row, bufferPosition.column - 1]) + @languageMode.findClosingBracket([bufferPosition.row, bufferPosition.column - 1]) diff --git a/src/app/fold-suggester.coffee b/src/app/fold-suggester.coffee index e3747636e..e9841964d 100644 --- a/src/app/fold-suggester.coffee +++ b/src/app/fold-suggester.coffee @@ -2,10 +2,10 @@ AceFoldAdaptor = require 'ace-fold-adaptor' module.exports = class FoldSuggester - constructor: (@highlighter) -> - @buffer = @highlighter.buffer + constructor: (@languageMode) -> + @buffer = @languageMode.buffer @aceFoldMode = @buffer.getMode().foldingRules - @aceFoldAdaptor = new AceFoldAdaptor(@highlighter) + @aceFoldAdaptor = new AceFoldAdaptor(@languageMode) isBufferRowFoldable: (bufferRow) -> @aceFoldMode?.getFoldWidget(@aceFoldAdaptor, null, bufferRow) == "start" diff --git a/src/app/highlighter.coffee b/src/app/language-mode.coffee similarity index 95% rename from src/app/highlighter.coffee rename to src/app/language-mode.coffee index 7ccdac9fb..66c58ddce 100644 --- a/src/app/highlighter.coffee +++ b/src/app/language-mode.coffee @@ -6,7 +6,7 @@ Range = require 'range' Point = require 'point' module.exports = -class Highlighter +class LanguageMode @idCounter: 1 buffer: null screenLines: [] @@ -14,7 +14,7 @@ class Highlighter constructor: (@buffer, @tabText) -> @id = @constructor.idCounter++ @screenLines = @buildScreenLinesForRows('start', 0, @buffer.getLastRow()) - @buffer.on "change.highlighter#{@id}", (e) => @handleBufferChange(e) + @buffer.on "change.languageMode#{@id}", (e) => @handleBufferChange(e) handleBufferChange: (e) -> oldRange = e.oldRange.copy() @@ -75,7 +75,7 @@ class Highlighter @screenLines[row]?.state ? 'start' destroy: -> - @buffer.off ".highlighter#{@id}" + @buffer.off ".languageMode#{@id}" iterateTokensInBufferRange: (bufferRange, iterator) -> bufferRange = Range.fromObject(bufferRange) @@ -107,4 +107,4 @@ class Highlighter stop() position -_.extend(Highlighter.prototype, EventEmitter) +_.extend(LanguageMode.prototype, EventEmitter) diff --git a/src/app/line-commenter.coffee b/src/app/line-commenter.coffee index 5feac4d4e..ea80cca7d 100644 --- a/src/app/line-commenter.coffee +++ b/src/app/line-commenter.coffee @@ -3,15 +3,15 @@ AceLineCommentAdaptor = require 'ace-line-comment-adaptor' module.exports = class LineCommenter - highlighter: null + languageMode: null buffer: null aceMode: null - constructor: (@highlighter) -> - @buffer = @highlighter.buffer + constructor: (@languageMode) -> + @buffer = @languageMode.buffer @aceMode = @buffer.getMode() @adaptor = new AceLineCommentAdaptor(@buffer) toggleLineCommentsInRange: (range) -> range = Range.fromObject(range) - @aceMode.toggleCommentLines(@highlighter.stateForRow(range.start.row), @adaptor, range.start.row, range.end.row) + @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 8117776a3..79bc1c092 100644 --- a/src/app/renderer.coffee +++ b/src/app/renderer.coffee @@ -1,5 +1,5 @@ _ = require 'underscore' -Highlighter = require 'highlighter' +LanguageMode = require 'language-mode' FoldSuggester = require 'fold-suggester' LineMap = require 'line-map' Point = require 'point' @@ -14,22 +14,22 @@ module.exports = class Renderer @idCounter: 1 lineMap: null - highlighter: null + languageMode: null activeFolds: null lineCommenter: null foldsById: null - lastHighlighterChangeEvent: null + lastLanguageModeChangeEvent: null constructor: (@buffer, options={}) -> @id = @constructor.idCounter++ - @highlighter = new Highlighter(@buffer, options.tabText ? ' ') - @lineCommenter = new LineCommenter(@highlighter) - @foldSuggester = new FoldSuggester(@highlighter) + @languageMode = new LanguageMode(@buffer, options.tabText ? ' ') + @lineCommenter = new LineCommenter(@languageMode) + @foldSuggester = new FoldSuggester(@languageMode) @softWrapColumn = options.softWrapColumn ? Infinity @activeFolds = {} @foldsById = {} @buildLineMap() - @highlighter.on 'change', (e) => @lastHighlighterChangeEvent = e + @languageMode.on 'change', (e) => @lastLanguageModeChangeEvent = e @buffer.on "change.renderer#{@id}", (e) => @handleBufferChange(e) buildLineMap: -> @@ -163,7 +163,7 @@ class Renderer @lineMap.bufferPositionForScreenPosition(position, options) stateForScreenRow: (screenRow) -> - @highlighter.stateForRow(screenRow) + @languageMode.stateForRow(screenRow) clipScreenPosition: (position, options) -> @lineMap.clipScreenPosition(position, options) @@ -173,9 +173,9 @@ class Renderer allFolds.push(folds...) for row, folds of @activeFolds fold.handleBufferChange(e) for fold in allFolds - @handleHighlighterChange(@lastHighlighterChangeEvent) + @handleLanguageModeChange(@lastLanguageModeChangeEvent) - handleHighlighterChange: (e) -> + handleLanguageModeChange: (e) -> newRange = e.newRange.copy() newRange.start.row = @bufferRowForScreenRow(@screenRowForBufferRow(newRange.start.row)) @@ -202,7 +202,7 @@ class Renderer startBufferColumn = 0 while currentBufferRow <= endBufferRow - screenLine = @highlighter.lineForScreenRow(currentBufferRow) + screenLine = @languageMode.lineForScreenRow(currentBufferRow) screenLine.foldable = @foldSuggester.isBufferRowFoldable(currentBufferRow) if fold = @largestFoldForBufferRow(currentBufferRow) @@ -256,7 +256,7 @@ class Renderer new Range([0, 0], @clipScreenPosition([Infinity, Infinity])) destroy: -> - @highlighter.destroy() + @languageMode.destroy() @buffer.off ".renderer#{@id}" logLines: (start, end) ->