From 8df6553ce2e26ec0a3b29c6186c1f2f6c506f428 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Sun, 8 Sep 2013 22:27:08 +0200 Subject: [PATCH 1/4] Add a literate handler in the coffeescript package Add .coffee.md handling tests --- packages/coffeescript/coffeescript_tests.js | 3 ++- packages/coffeescript/package.js | 7 ++++--- .../coffeescript/plugin/compile-coffeescript.js | 17 +++++++++++++---- .../coffeescript_strict_tests.coffee | 0 .../{ => tests}/coffeescript_tests.coffee | 0 .../tests/litcoffeescript_tests.coffee.md | 6 ++++++ .../{ => tests}/litcoffeescript_tests.litcoffee | 0 7 files changed, 25 insertions(+), 8 deletions(-) rename packages/coffeescript/{ => tests}/coffeescript_strict_tests.coffee (100%) rename packages/coffeescript/{ => tests}/coffeescript_tests.coffee (100%) create mode 100644 packages/coffeescript/tests/litcoffeescript_tests.coffee.md rename packages/coffeescript/{ => tests}/litcoffeescript_tests.litcoffee (100%) diff --git a/packages/coffeescript/coffeescript_tests.js b/packages/coffeescript/coffeescript_tests.js index 6baa3ca189..dad72f95fa 100644 --- a/packages/coffeescript/coffeescript_tests.js +++ b/packages/coffeescript/coffeescript_tests.js @@ -3,9 +3,10 @@ Tinytest.add("coffeescript - presence", function(test) { }); Tinytest.add("literate coffeescript - presence", function(test) { test.isTrue(Meteor.__LITCOFFEESCRIPT_PRESENT); + test.isTrue(Meteor.__COFFEEMDSCRIPT_PRESENT); }); Tinytest.add("coffeescript - exported variable", function(test) { test.equal(COFFEESCRIPT_EXPORTED, 123); test.equal(Package['coffeescript-test-helper'].COFFEESCRIPT_EXPORTED, 123); -}); +}); \ No newline at end of file diff --git a/packages/coffeescript/package.js b/packages/coffeescript/package.js index 2a13f962fb..e31e47b9db 100644 --- a/packages/coffeescript/package.js +++ b/packages/coffeescript/package.js @@ -16,9 +16,10 @@ Package.on_test(function (api) { api.use(['coffeescript-test-helper'], ['client', 'server']); api.add_files([ 'coffeescript_test_setup.js', - 'coffeescript_tests.coffee', - 'coffeescript_strict_tests.coffee', - 'litcoffeescript_tests.litcoffee', + 'tests/coffeescript_tests.coffee', + 'tests/coffeescript_strict_tests.coffee', + 'tests/litcoffeescript_tests.litcoffee', + 'tests/litcoffeescript_tests.coffee.md', 'coffeescript_tests.js' ], ['client', 'server']); }); diff --git a/packages/coffeescript/plugin/compile-coffeescript.js b/packages/coffeescript/plugin/compile-coffeescript.js index 3270a2912e..27b27464ba 100644 --- a/packages/coffeescript/plugin/compile-coffeescript.js +++ b/packages/coffeescript/plugin/compile-coffeescript.js @@ -113,13 +113,17 @@ var addSharedHeader = function (source, sourceMap) { }; }; -var handler = function (compileStep) { +var handler = function (compileStep, isLiterate) { + if (typeof isLiterate === "undefined") + var isLiterate = false; + var source = compileStep.read().toString('utf8'); var outputFile = compileStep.inputPath + ".js"; + var options = { bare: true, filename: compileStep.inputPath, - literate: path.extname(compileStep.inputPath) === '.litcoffee', + literate: isLiterate, // Return a source map. sourceMap: true, // Include the original source in the source map (sourcesContent field). @@ -152,6 +156,11 @@ var handler = function (compileStep) { }); }; -Plugin.registerSourceHandler("coffee", handler); -Plugin.registerSourceHandler("litcoffee", handler); +var literateHandler = function (compileStep) { + return handler(compileStep, true); +} + +Plugin.registerSourceHandler("coffee", handler); +Plugin.registerSourceHandler("litcoffee", literateHandler); +Plugin.registerSourceHandler("coffee.md", literateHandler); diff --git a/packages/coffeescript/coffeescript_strict_tests.coffee b/packages/coffeescript/tests/coffeescript_strict_tests.coffee similarity index 100% rename from packages/coffeescript/coffeescript_strict_tests.coffee rename to packages/coffeescript/tests/coffeescript_strict_tests.coffee diff --git a/packages/coffeescript/coffeescript_tests.coffee b/packages/coffeescript/tests/coffeescript_tests.coffee similarity index 100% rename from packages/coffeescript/coffeescript_tests.coffee rename to packages/coffeescript/tests/coffeescript_tests.coffee diff --git a/packages/coffeescript/tests/litcoffeescript_tests.coffee.md b/packages/coffeescript/tests/litcoffeescript_tests.coffee.md new file mode 100644 index 0000000000..e68b845a96 --- /dev/null +++ b/packages/coffeescript/tests/litcoffeescript_tests.coffee.md @@ -0,0 +1,6 @@ +This file is just the same as `coffeescript_tests.coffee`, first we set a +property, which we check for in `coffeescript_tests.js`, and then a trivial +testcase. + + Meteor.__COFFEEMDSCRIPT_PRESENT = true + Tinytest.add "markdown coffeescript - compile", (test) -> test.isTrue true diff --git a/packages/coffeescript/litcoffeescript_tests.litcoffee b/packages/coffeescript/tests/litcoffeescript_tests.litcoffee similarity index 100% rename from packages/coffeescript/litcoffeescript_tests.litcoffee rename to packages/coffeescript/tests/litcoffeescript_tests.litcoffee From d4186524b85395813a777444229e64d48fefa546 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Sun, 8 Sep 2013 23:05:30 +0200 Subject: [PATCH 2/4] Support multiple extensions in _getSourceHandler --- tools/packages.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/tools/packages.js b/tools/packages.js index 09290ac63d..fe60ed384b 100644 --- a/tools/packages.js +++ b/tools/packages.js @@ -236,8 +236,8 @@ _.extend(Slice.prototype, { var relPath = source.relPath; var fileOptions = _.clone(source.fileOptions) || {}; var absPath = path.resolve(self.pkg.sourceRoot, relPath); - var ext = path.extname(relPath).substr(1); - var handler = !fileOptions.isAsset && self._getSourceHandler(ext); + var filename = path.basename(relPath, ''); + var handler = !fileOptions.isAsset && self._getSourceHandler(filename); var contents = watch.readAndWatchFile(self.watchSet, absPath); if (contents === null) { @@ -723,12 +723,17 @@ _.extend(Slice.prototype, { // Find the function that should be used to handle a source file for // this slice, or return null if there isn't one. We'll use handlers - // that are defined in this package and in its immediate - // dependencies. ('extension' should be the extension of the file - // without a leading dot.) - _getSourceHandler: function (extension) { + // that are defined in this package and in its immediate dependencies. + _getSourceHandler: function (filename) { var self = this; - return (self._allHandlers())[extension] || null; + var handlers = self._allHandlers(); + var parts = filename.split('.'); + for (var i = 0; i < parts.length; i++) { + var extension = parts.slice(i).join('.'); + if (extension in handlers) + return handlers[extension]; + } + return null; } }); @@ -946,7 +951,8 @@ _.extend(Package.prototype, { return; var Plugin = { - // 'extension' is a file extension without a dot (eg 'js', 'coffee') + // 'extension' is a file extension without the separation dot + // (eg 'js', 'coffee', 'coffee.md') // // 'handler' is a function that takes a single argument, a // CompileStep (#CompileStep) From c66b8e3db5a541c8388d773261dc6fc5f2e55fee Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Thu, 12 Sep 2013 23:05:39 +0200 Subject: [PATCH 3/4] Style tweaks --- packages/coffeescript/plugin/compile-coffeescript.js | 5 +---- tools/packages.js | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/coffeescript/plugin/compile-coffeescript.js b/packages/coffeescript/plugin/compile-coffeescript.js index 27b27464ba..b0c94ce870 100644 --- a/packages/coffeescript/plugin/compile-coffeescript.js +++ b/packages/coffeescript/plugin/compile-coffeescript.js @@ -114,16 +114,13 @@ var addSharedHeader = function (source, sourceMap) { }; var handler = function (compileStep, isLiterate) { - if (typeof isLiterate === "undefined") - var isLiterate = false; - var source = compileStep.read().toString('utf8'); var outputFile = compileStep.inputPath + ".js"; var options = { bare: true, filename: compileStep.inputPath, - literate: isLiterate, + literate: !!isLiterate, // Return a source map. sourceMap: true, // Include the original source in the source map (sourcesContent field). diff --git a/tools/packages.js b/tools/packages.js index fe60ed384b..adedc992e1 100644 --- a/tools/packages.js +++ b/tools/packages.js @@ -236,7 +236,7 @@ _.extend(Slice.prototype, { var relPath = source.relPath; var fileOptions = _.clone(source.fileOptions) || {}; var absPath = path.resolve(self.pkg.sourceRoot, relPath); - var filename = path.basename(relPath, ''); + var filename = path.basename(relPath); var handler = !fileOptions.isAsset && self._getSourceHandler(filename); var contents = watch.readAndWatchFile(self.watchSet, absPath); @@ -730,7 +730,7 @@ _.extend(Slice.prototype, { var parts = filename.split('.'); for (var i = 0; i < parts.length; i++) { var extension = parts.slice(i).join('.'); - if (extension in handlers) + if (_has(handlers, extension) return handlers[extension]; } return null; From 259fb036c8b083a1387b26a38474094e4ff0c7d9 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Thu, 12 Sep 2013 23:23:31 +0200 Subject: [PATCH 4/4] Fix syntax --- tools/packages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/packages.js b/tools/packages.js index adedc992e1..41832c04fd 100644 --- a/tools/packages.js +++ b/tools/packages.js @@ -730,7 +730,7 @@ _.extend(Slice.prototype, { var parts = filename.split('.'); for (var i = 0; i < parts.length; i++) { var extension = parts.slice(i).join('.'); - if (_has(handlers, extension) + if (_.has(handlers, extension)) return handlers[extension]; } return null;