diff --git a/bin/lessc b/bin/lessc index 0945e7c4..690535fe 100755 --- a/bin/lessc +++ b/bin/lessc @@ -75,7 +75,7 @@ args = args.filter(function (arg) { case 'O1': options.optimization = 1; break; case 'O2': options.optimization = 2; break; case 'line-numbers': - options.dumpLineNumbers = true; + options.dumpLineNumbers = match[2]; break; } }); diff --git a/lib/less/browser.js b/lib/less/browser.js index 53dd73f9..a9f577fd 100644 --- a/lib/less/browser.js +++ b/lib/less/browser.js @@ -35,8 +35,9 @@ if (less.env === 'development') { if (/!watch/.test(location.hash)) { less.watch(); } - if (/!dumpLineNumbers/.test(location.hash)) { - less.dumpLineNumbers = true; + var dumpLineNumbers = /!dumpLineNumbers:(comments|mediaquery|all)/.exec(location.hash); + if (dumpLineNumbers) { + less.dumpLineNumbers = dumpLineNumbers[1]; } less.watchTimer = setInterval(function () { if (less.watchMode) { diff --git a/lib/less/index.js b/lib/less/index.js index ec2d302e..7ffbbcf6 100644 --- a/lib/less/index.js +++ b/lib/less/index.js @@ -119,7 +119,8 @@ less.Parser.importer = function (file, paths, callback, env) { new(less.Parser)({ paths: [path.dirname(pathname)].concat(paths), filename: pathname, - contents: env.contents + contents: env.contents, + dumpLineNumbers: env.dumpLineNumbers }).parse(data, function (e, root) { callback(e, root); }); diff --git a/lib/less/lessc_helper.js b/lib/less/lessc_helper.js index 75df00bd..7c051be5 100644 --- a/lib/less/lessc_helper.js +++ b/lib/less/lessc_helper.js @@ -41,6 +41,12 @@ var lessc_helper = { sys.puts(" the number, the less nodes it will create in the"); sys.puts(" tree. This could matter for debugging, or if you"); sys.puts(" want to access the individual nodes in the tree."); + sys.puts(" --line-numbers=TYPE Outputs filename and line numbers."); + sys.puts(" TYPE can be either 'comments', which will output"); + sys.puts(" the debug info within comments, 'mediaquery'"); + sys.puts(" that will output the information within a fake"); + sys.puts(" media query which is compatible with the SASS"); + sys.puts(" format, and 'all' which will do both."); sys.puts(""); sys.puts("Report bugs to: http://github.com/cloudhead/less.js/issues"); sys.puts("Home page: "); diff --git a/lib/less/tree/ruleset.js b/lib/less/tree/ruleset.js index b8e84ec9..3ef69e57 100644 --- a/lib/less/tree/ruleset.js +++ b/lib/less/tree/ruleset.js @@ -133,7 +133,9 @@ tree.Ruleset.prototype = { rulesets = [], // node.Ruleset instances paths = [], // Current selectors selector, // The fully rendered selector - lineNumbersComment, // A comment with line number for debugging. + lineNumbersInfo, // Line number debugging, either as comment or fake media query. + lineNumbersComment, // Line number debug info as comment + lineNumbersMediaQuery, // Line number debug info as media query rule; if (! this.root) { @@ -172,9 +174,24 @@ tree.Ruleset.prototype = { css.push(rules.join(env.compress ? '' : '\n')); } else { if (rules.length > 0) { - lineNumbersComment = ""; - if (env.dumpLineNumbers && !env.compress) + lineNumbersInfo = ""; + lineNumbersComment = ''; + lineNumbersMediaQuery = ''; + if (env.dumpLineNumbers && !env.compress) { lineNumbersComment = '/* line ' + this.sourceLineNumber + ', ' + env.filename + ' */\n'; + lineNumbersMediaQuery = '@media -sass-debug-info{filename{font-family:"' + env.filename + '";}line{font-family:"' + this.sourceLineNumber + '";}}\n'; + switch(env.dumpLineNumbers) { + case 'comments': + lineNumbersInfo = lineNumbersComment; + break; + case 'mediaquery': + lineNumbersInfo = lineNumbersMediaQuery; + break; + case 'all': + lineNumbersInfo = lineNumbersComment+lineNumbersMediaQuery; + break; + } + } selector = paths.map(function (p) { return p.map(function (s) { return s.toCSS(env); @@ -189,7 +206,7 @@ tree.Ruleset.prototype = { } rules = _rules; - css.push(lineNumbersComment + selector + + css.push(lineNumbersInfo + selector + (env.compress ? '{' : ' {\n ') + rules.join(env.compress ? '' : '\n ') + (env.compress ? '}' : '\n}\n')); diff --git a/test/css/debug/comments.css b/test/css/debug/comments/comments.css similarity index 100% rename from test/css/debug/comments.css rename to test/css/debug/comments/comments.css diff --git a/test/less-test.js b/test/less-test.js index 96daa97b..63f29748 100644 --- a/test/less-test.js +++ b/test/less-test.js @@ -46,7 +46,7 @@ runTestSet(null, "errors/", function(name, err, compiledLess) { sys.puts(""); });}); -runTestSet({dumpLineNumbers: true}, "debug/"); +runTestSet({dumpLineNumbers: 'comments'}, "debug/comments/"); function runTestSet(options, foldername, verifyFunction) { foldername = foldername || ""; diff --git a/test/less/debug/comments.less b/test/less/debug/comments/comments.less similarity index 100% rename from test/less/debug/comments.less rename to test/less/debug/comments/comments.less diff --git a/test/less/debug/import/test.less b/test/less/debug/comments/import/test.less similarity index 100% rename from test/less/debug/import/test.less rename to test/less/debug/comments/import/test.less