From 05c3d8938173fbb259d4883062f1cbc20f1280f4 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 24 Oct 2013 15:43:57 -0700 Subject: [PATCH 1/3] Measure indent prefix on each line being commented Previously a single indent string was used to replace all lines which could corrupt lines using hard tabs since the indent string used for replacement was two spaces causing the first character of the line to be deleted. Closes atom/language-c#1 --- spec/language-mode-spec.coffee | 4 ++++ src/language-mode.coffee | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/spec/language-mode-spec.coffee b/spec/language-mode-spec.coffee index 37b268840..adde464d0 100644 --- a/spec/language-mode-spec.coffee +++ b/spec/language-mode-spec.coffee @@ -32,6 +32,10 @@ describe "LanguageMode", -> expect(buffer.lineForRow(6)).toBe " // current < pivot ? left.push(current) : right.push(current);" expect(buffer.lineForRow(7)).toBe " // }" + buffer.setText('\tvar i;') + languageMode.toggleLineCommentsForBufferRows(0, 0) + expect(buffer.lineForRow(0)).toBe "\t// var i;" + describe "fold suggestion", -> describe ".doesBufferRowStartFold(bufferRow)", -> it "returns true only when the buffer row starts a foldable region", -> diff --git a/src/language-mode.coffee b/src/language-mode.coffee index e0c16a31b..462be533d 100644 --- a/src/language-mode.coffee +++ b/src/language-mode.coffee @@ -84,8 +84,14 @@ class LanguageMode else indent = @minIndentLevelForRowRange(start, end) indentString = @editSession.buildIndentString(indent) + tabLength = @editSession.getTabLength() + indentRegex = new RegExp("(\t|[ ]{#{tabLength}}){#{Math.floor(indent)}}") for row in [start..end] - buffer.change([[row, 0], [row, indentString.length]], indentString + commentStartString) + line = buffer.lineForRow(row) + if indentLength = line.match(indentRegex)?[0].length + buffer.insert([row, indentLength], commentStartString) + else + buffer.change([[row, 0], [row, indentString.length]], indentString + commentStartString) # Folds all the foldable lines in the buffer. foldAll: -> From 08d5231d28cd5e9952f4842719daebff556dc3f9 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 25 Oct 2013 09:02:19 -0700 Subject: [PATCH 2/3] Add assert for unindented line --- spec/language-mode-spec.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/language-mode-spec.coffee b/spec/language-mode-spec.coffee index adde464d0..5d0dc842e 100644 --- a/spec/language-mode-spec.coffee +++ b/spec/language-mode-spec.coffee @@ -36,6 +36,10 @@ describe "LanguageMode", -> languageMode.toggleLineCommentsForBufferRows(0, 0) expect(buffer.lineForRow(0)).toBe "\t// var i;" + buffer.setText('var i;') + languageMode.toggleLineCommentsForBufferRows(0, 0) + expect(buffer.lineForRow(0)).toBe "// var i;" + describe "fold suggestion", -> describe ".doesBufferRowStartFold(bufferRow)", -> it "returns true only when the buffer row starts a foldable region", -> From 57577966e7d29a759e66e354955e9fca40735a80 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Sat, 26 Oct 2013 14:24:59 -0700 Subject: [PATCH 3/3] Add assert for .5 indent level --- spec/language-mode-spec.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/language-mode-spec.coffee b/spec/language-mode-spec.coffee index 5d0dc842e..b27a15c68 100644 --- a/spec/language-mode-spec.coffee +++ b/spec/language-mode-spec.coffee @@ -40,6 +40,10 @@ describe "LanguageMode", -> languageMode.toggleLineCommentsForBufferRows(0, 0) expect(buffer.lineForRow(0)).toBe "// var i;" + buffer.setText(' var i;') + languageMode.toggleLineCommentsForBufferRows(0, 0) + expect(buffer.lineForRow(0)).toBe " // var i;" + describe "fold suggestion", -> describe ".doesBufferRowStartFold(bufferRow)", -> it "returns true only when the buffer row starts a foldable region", ->