From 7516cebb404d7870bf8cf3389c9f65e1a85fbae2 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Kevin Sawicki Date: Tue, 11 Jun 2013 12:25:57 -0700 Subject: [PATCH] Comment .less code correctly --- spec/app/language-mode-spec.coffee | 19 ++++++++++++++++--- src/app/language-mode.coffee | 10 ++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index adcd9b868..efb45b138 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -12,7 +12,7 @@ describe "LanguageMode", -> beforeEach -> atom.activatePackage('javascript-tmbundle', sync: true) editSession = project.open('sample.js', autoIndent: false) - { buffer, languageMode } = editSession + {buffer, languageMode} = editSession describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> @@ -54,7 +54,7 @@ describe "LanguageMode", -> beforeEach -> atom.activatePackage('coffee-script-tmbundle', sync: true) editSession = project.open('coffee.coffee', autoIndent: false) - { buffer, languageMode } = editSession + {buffer, languageMode} = editSession describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> @@ -90,7 +90,7 @@ describe "LanguageMode", -> beforeEach -> atom.activatePackage('css-tmbundle', sync: true) editSession = project.open('css.css', autoIndent: false) - { buffer, languageMode } = editSession + {buffer, languageMode} = editSession describe ".toggleLineCommentsForBufferRows(start, end)", -> it "comments/uncomments lines in the given range", -> @@ -126,3 +126,16 @@ describe "LanguageMode", -> buffer.change([[2, 0], [2, Infinity]], " /*width: 110%;*/ ") languageMode.toggleLineCommentsForBufferRows(2, 2) expect(buffer.lineForRow(2)).toBe " width: 110%; " + + describe "less", -> + beforeEach -> + atom.activatePackage('less-tmbundle', sync: true) + atom.activatePackage('css-tmbundle', sync: true) + editSession = project.open('sample.less', autoIndent: false) + {buffer, languageMode} = editSession + + describe "when commenting lines", -> + it "only uses the `commentEnd` pattern if it comes from the same grammar as the `commentStart`", -> + languageMode.toggleLineCommentsForBufferRows(0, 0) + expect(buffer.lineForRow(0)).toBe "// @color: #4D926F;" + diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index b3cfb1ec9..204e3f7ef 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -37,14 +37,20 @@ class LanguageMode # Returns an {Array} of the commented {Ranges}. toggleLineCommentsForBufferRows: (start, end) -> scopes = @editSession.scopesForBufferPosition([start, 0]) - return unless commentStartString = syntax.getProperty(scopes, "editor.commentStart") + properties = syntax.propertiesForScope(scopes, "editor.commentStart")[0] + return unless properties + + commentStartString = _.valueForKeyPath(properties, "editor.commentStart") + commentEndString = _.valueForKeyPath(properties, "editor.commentEnd") + + return unless commentStartString buffer = @editSession.buffer commentStartRegexString = _.escapeRegExp(commentStartString).replace(/(\s+)$/, '($1)?') commentStartRegex = new OnigRegExp("^(\\s*)(#{commentStartRegexString})") shouldUncomment = commentStartRegex.test(buffer.lineForRow(start)) - if commentEndString = syntax.getProperty(scopes, "editor.commentEnd") + if commentEndString if shouldUncomment commentEndRegexString = _.escapeRegExp(commentEndString).replace(/^(\s+)/, '($1)?') commentEndRegex = new OnigRegExp("(#{commentEndRegexString})(\\s*)$")