From 90e53ad3e275710bc4a7ddf8259f910f0f37d000 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 16:04:53 -0700 Subject: [PATCH 01/12] Add proper indents on auto comments --- spec/app/language-mode-spec.coffee | 48 ++++++++++++++++++++++-------- src/app/language-mode.coffee | 15 +++++++++- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index efb45b138..d0ddfedd8 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -14,19 +14,25 @@ describe "LanguageMode", -> editSession = project.open('sample.js', autoIndent: false) {buffer, languageMode} = editSession + describe ".calcMinIndent(startRow, endRow)", -> + it "returns indent levels for ranges", -> + expect(languageMode.calcMinIndent(4, 7)).toBe 2 + expect(languageMode.calcMinIndent(5, 7)).toBe 2 + expect(languageMode.calcMinIndent(5, 6)).toBe 3 + describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> languageMode.toggleLineCommentsForBufferRows(4, 7) - 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 "// }" + 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.toggleLineCommentsForBufferRows(4, 5) 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 "// }" + expect(buffer.lineForRow(6)).toBe " // current < pivot ? left.push(current) : right.push(current);" + expect(buffer.lineForRow(7)).toBe " // }" describe "fold suggestion", -> describe ".doesBufferRowStartFold(bufferRow)", -> @@ -56,19 +62,35 @@ describe "LanguageMode", -> editSession = project.open('coffee.coffee', autoIndent: false) {buffer, languageMode} = editSession + describe ".calcMinIndent(startRow, endRow)", -> + it "returns indent levels for ranges", -> + expect(languageMode.calcMinIndent(4, 6)).toBe 2 + expect(languageMode.calcMinIndent(4, 7)).toBe 2 + describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> - languageMode.toggleLineCommentsForBufferRows(4, 7) - expect(buffer.lineForRow(4)).toBe "# pivot = items.shift()" - expect(buffer.lineForRow(5)).toBe "# left = []" - expect(buffer.lineForRow(6)).toBe "# right = []" - expect(buffer.lineForRow(7)).toBe "# " + languageMode.toggleLineCommentsForBufferRows(4, 6) + expect(buffer.lineForRow(4)).toBe " # pivot = items.shift()" + expect(buffer.lineForRow(5)).toBe " # left = []" + expect(buffer.lineForRow(6)).toBe " # right = []" languageMode.toggleLineCommentsForBufferRows(4, 5) expect(buffer.lineForRow(4)).toBe " pivot = items.shift()" expect(buffer.lineForRow(5)).toBe " left = []" - expect(buffer.lineForRow(6)).toBe "# right = []" - expect(buffer.lineForRow(7)).toBe "# " + expect(buffer.lineForRow(6)).toBe " # right = []" + + it "comments/uncomments lines when empty line", -> + languageMode.toggleLineCommentsForBufferRows(4, 7) + expect(buffer.lineForRow(4)).toBe " # pivot = items.shift()" + expect(buffer.lineForRow(5)).toBe " # left = []" + expect(buffer.lineForRow(6)).toBe " # right = []" + expect(buffer.lineForRow(7)).toBe " # " + + languageMode.toggleLineCommentsForBufferRows(4, 5) + expect(buffer.lineForRow(4)).toBe " pivot = items.shift()" + expect(buffer.lineForRow(5)).toBe " left = []" + expect(buffer.lineForRow(6)).toBe " # right = []" + expect(buffer.lineForRow(7)).toBe " # " describe "fold suggestion", -> describe ".doesBufferRowStartFold(bufferRow)", -> diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index 204e3f7ef..4a4e32406 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -81,8 +81,10 @@ class LanguageMode columnEnd = columnStart + match[2].length buffer.change([[row, columnStart], [row, columnEnd]], "") else + indent = @calcMinIndent(start, end) + indentString = @editSession.buildIndentString(indent) for row in [start..end] - buffer.insert([row, 0], commentStartString) + buffer.change(new Range([row, 0], [row, indentString.length]), indentString+commentStartString) # Folds all the foldable lines in the buffer. foldAll: -> @@ -180,6 +182,17 @@ class LanguageMode desiredIndentLevel + # Calculate a minimum indent level for a range of lines. + # + # startRow - The row {Number} to start at + # endRow - The row {Number} to end at + # + # Returns a {Number} of the indent level of the block of lines. + calcMinIndent: (startRow, endRow) -> + buffer = @editSession.buffer + indents = (@editSession.indentationForBufferRow(row) for row in [startRow..endRow] when buffer.lineForRow(row).trim()) + Math.min(indents...) + # Indents all the rows between two buffer row numbers. # # startRow - The row {Number} to start at From 365e5e84135a358a86dad9cd85daecb9dbaac088 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 17:35:05 -0700 Subject: [PATCH 02/12] calcMinIndent -> minIndentLevelForRowRange --- spec/app/language-mode-spec.coffee | 16 ++++++++-------- src/app/language-mode.coffee | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index d0ddfedd8..3bd2daa2f 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -2,7 +2,7 @@ Project = require 'project' Buffer = require 'text-buffer' EditSession = require 'edit-session' -describe "LanguageMode", -> +fdescribe "LanguageMode", -> [editSession, buffer, languageMode] = [] afterEach -> @@ -14,11 +14,11 @@ describe "LanguageMode", -> editSession = project.open('sample.js', autoIndent: false) {buffer, languageMode} = editSession - describe ".calcMinIndent(startRow, endRow)", -> + describe ".minIndentLevelForRowRange(startRow, endRow)", -> it "returns indent levels for ranges", -> - expect(languageMode.calcMinIndent(4, 7)).toBe 2 - expect(languageMode.calcMinIndent(5, 7)).toBe 2 - expect(languageMode.calcMinIndent(5, 6)).toBe 3 + expect(languageMode.minIndentLevelForRowRange(4, 7)).toBe 2 + expect(languageMode.minIndentLevelForRowRange(5, 7)).toBe 2 + expect(languageMode.minIndentLevelForRowRange(5, 6)).toBe 3 describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> @@ -62,10 +62,10 @@ describe "LanguageMode", -> editSession = project.open('coffee.coffee', autoIndent: false) {buffer, languageMode} = editSession - describe ".calcMinIndent(startRow, endRow)", -> + describe ".minIndentLevelForRowRange(startRow, endRow)", -> it "returns indent levels for ranges", -> - expect(languageMode.calcMinIndent(4, 6)).toBe 2 - expect(languageMode.calcMinIndent(4, 7)).toBe 2 + expect(languageMode.minIndentLevelForRowRange(4, 6)).toBe 2 + expect(languageMode.minIndentLevelForRowRange(4, 7)).toBe 2 describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index 4a4e32406..c0cd4c1d8 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -81,7 +81,7 @@ class LanguageMode columnEnd = columnStart + match[2].length buffer.change([[row, columnStart], [row, columnEnd]], "") else - indent = @calcMinIndent(start, end) + indent = @minIndentLevelForRowRange(start, end) indentString = @editSession.buildIndentString(indent) for row in [start..end] buffer.change(new Range([row, 0], [row, indentString.length]), indentString+commentStartString) @@ -188,7 +188,7 @@ class LanguageMode # endRow - The row {Number} to end at # # Returns a {Number} of the indent level of the block of lines. - calcMinIndent: (startRow, endRow) -> + minIndentLevelForRowRange: (startRow, endRow) -> buffer = @editSession.buffer indents = (@editSession.indentationForBufferRow(row) for row in [startRow..endRow] when buffer.lineForRow(row).trim()) Math.min(indents...) From 3f8c120ad01066ffb88b4304c60916a7366748aa Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 17:37:45 -0700 Subject: [PATCH 03/12] update tests to be more clear --- spec/app/language-mode-spec.coffee | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index 3bd2daa2f..4a02b9673 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -15,10 +15,11 @@ fdescribe "LanguageMode", -> {buffer, languageMode} = editSession describe ".minIndentLevelForRowRange(startRow, endRow)", -> - it "returns indent levels for ranges", -> + it "returns the minimum indent level for the given row range", -> expect(languageMode.minIndentLevelForRowRange(4, 7)).toBe 2 expect(languageMode.minIndentLevelForRowRange(5, 7)).toBe 2 expect(languageMode.minIndentLevelForRowRange(5, 6)).toBe 3 + expect(languageMode.minIndentLevelForRowRange(9, 11)).toBe 1 describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> @@ -62,11 +63,6 @@ fdescribe "LanguageMode", -> editSession = project.open('coffee.coffee', autoIndent: false) {buffer, languageMode} = editSession - describe ".minIndentLevelForRowRange(startRow, endRow)", -> - it "returns indent levels for ranges", -> - expect(languageMode.minIndentLevelForRowRange(4, 6)).toBe 2 - expect(languageMode.minIndentLevelForRowRange(4, 7)).toBe 2 - describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> languageMode.toggleLineCommentsForBufferRows(4, 6) From abdce2df042a182a58ef4040cd8f62535d2b053e Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 17:38:51 -0700 Subject: [PATCH 04/12] replace `new Range(...)` with `[[..], [..]]` syntax --- src/app/language-mode.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index c0cd4c1d8..d305f5f10 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -84,7 +84,7 @@ class LanguageMode indent = @minIndentLevelForRowRange(start, end) indentString = @editSession.buildIndentString(indent) for row in [start..end] - buffer.change(new Range([row, 0], [row, indentString.length]), indentString+commentStartString) + buffer.change([[row, 0], [row, indentString.length]], indentString+commentStartString) # Folds all the foldable lines in the buffer. foldAll: -> From 0924ad586fb91da1e5256adb17b931c19051fbf3 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 17:39:39 -0700 Subject: [PATCH 05/12] spaces around the + --- src/app/language-mode.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index d305f5f10..80f4c5545 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -84,7 +84,7 @@ class LanguageMode indent = @minIndentLevelForRowRange(start, end) indentString = @editSession.buildIndentString(indent) for row in [start..end] - buffer.change([[row, 0], [row, indentString.length]], indentString+commentStartString) + buffer.change([[row, 0], [row, indentString.length]], indentString + commentStartString) # Folds all the foldable lines in the buffer. foldAll: -> From c52cf836cdc6678903aab6e680fe0c0be9a94c37 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 17:42:33 -0700 Subject: [PATCH 06/12] remove the f on the describe --- spec/app/language-mode-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index 4a02b9673..168bf0d1c 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -2,7 +2,7 @@ Project = require 'project' Buffer = require 'text-buffer' EditSession = require 'edit-session' -fdescribe "LanguageMode", -> +describe "LanguageMode", -> [editSession, buffer, languageMode] = [] afterEach -> From c937827582ba10f0c8645ce9cdb49ab7cab44716 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 17:51:40 -0700 Subject: [PATCH 07/12] Use editSession.lineForBufferRow() Rather than the buffer directly. --- src/app/language-mode.coffee | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index 80f4c5545..283dc9428 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -189,8 +189,7 @@ class LanguageMode # # Returns a {Number} of the indent level of the block of lines. minIndentLevelForRowRange: (startRow, endRow) -> - buffer = @editSession.buffer - indents = (@editSession.indentationForBufferRow(row) for row in [startRow..endRow] when buffer.lineForRow(row).trim()) + indents = (@editSession.indentationForBufferRow(row) for row in [startRow..endRow] when @editSession.lineForBufferRow(row).trim()) Math.min(indents...) # Indents all the rows between two buffer row numbers. From 2aca31988f640904582495d99b0a1158be052dc9 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 17:56:52 -0700 Subject: [PATCH 08/12] Fix tests in EditSession --- spec/app/edit-session-spec.coffee | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index e9e74dd52..47f8ac23d 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -1717,10 +1717,10 @@ describe "EditSession", -> editSession.setSelectedBufferRange([[4, 5], [7, 5]]) editSession.toggleLineCommentsInSelection() - 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 "// }" + 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 " // }" expect(editSession.getSelectedBufferRange()).toEqual [[4, 8], [7, 8]] editSession.toggleLineCommentsInSelection() @@ -1732,9 +1732,9 @@ describe "EditSession", -> it "does not comment the last line of a non-empty selection if it ends at column 0", -> editSession.setSelectedBufferRange([[4, 5], [7, 0]]) editSession.toggleLineCommentsInSelection() - 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(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 " }" it "uncomments lines if all lines match the comment regex", -> From e43e8d156e01f61e297a598547b747038b84b10c Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 18:22:41 -0700 Subject: [PATCH 09/12] Combat against empty range; fixes tests --- spec/app/language-mode-spec.coffee | 1 + src/app/language-mode.coffee | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index 168bf0d1c..be7ebb14f 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -20,6 +20,7 @@ describe "LanguageMode", -> expect(languageMode.minIndentLevelForRowRange(5, 7)).toBe 2 expect(languageMode.minIndentLevelForRowRange(5, 6)).toBe 3 expect(languageMode.minIndentLevelForRowRange(9, 11)).toBe 1 + expect(languageMode.minIndentLevelForRowRange(10, 10)).toBe 0 describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index 283dc9428..e0e4cf6d6 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -190,7 +190,8 @@ class LanguageMode # Returns a {Number} of the indent level of the block of lines. minIndentLevelForRowRange: (startRow, endRow) -> indents = (@editSession.indentationForBufferRow(row) for row in [startRow..endRow] when @editSession.lineForBufferRow(row).trim()) - Math.min(indents...) + min = Math.min(indents...) + if min == Infinity then 0 else min # Indents all the rows between two buffer row numbers. # From 76be95bd6c1b887ba6a0f38a9ec8376b6490f70a Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 18:25:41 -0700 Subject: [PATCH 10/12] update comment --- src/app/language-mode.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index e0e4cf6d6..06082fc13 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -182,7 +182,7 @@ class LanguageMode desiredIndentLevel - # Calculate a minimum indent level for a range of lines. + # Calculate a minimum indent level for a range of lines excluding empty lines. # # startRow - The row {Number} to start at # endRow - The row {Number} to end at From bc55ee6bd2603f952e4a6754a3a78ccbbd69319c Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 18:30:43 -0700 Subject: [PATCH 11/12] Add change string to changelog.md Added a newline; assumed I am the first on this deploy --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61765affb..846cac2fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +* Fixed: Using toggle comment shortcut respects indentation level + * Fixed: Search never completing in the command panel * Fixed: cmd-n now works when no windows are open From d02e9172dadad11d9e7e7ae1c66e90a4aeedc99d Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 17 Jul 2013 21:04:50 -0700 Subject: [PATCH 12/12] :lipstick: --- src/app/language-mode.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index 06082fc13..9bf809f9d 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -189,9 +189,9 @@ class LanguageMode # # Returns a {Number} of the indent level of the block of lines. minIndentLevelForRowRange: (startRow, endRow) -> - indents = (@editSession.indentationForBufferRow(row) for row in [startRow..endRow] when @editSession.lineForBufferRow(row).trim()) - min = Math.min(indents...) - if min == Infinity then 0 else min + indents = (@editSession.indentationForBufferRow(row) for row in [startRow..endRow] when not @editSession.isBufferRowBlank(row)) + indents = [0] unless indents.length + Math.min(indents...) # Indents all the rows between two buffer row numbers. #