-
Notifications
You must be signed in to change notification settings - Fork 9
douglascrockford/ecomcon
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
ecomcon: Enable Comments Conditionally Douglas Crockford Public Domain Ecomcon is a filter that enables selected comments, making them executable. This makes it possible to put development, performance, and testing scaffolding into a source file. The scaffolding is removed by minification, but is activated by ecomcon. There are currently two implementations of ecomcon in C and JavaScript. Ecomcon is a filter that takes a source file and looks for tagged comments in this form: //tag stuff The line comment starts at the beginning of the line. There can be no space between the '//' and the tag. Ecomcon is given a list of the names of the tags that should be enabled. The implementation in C obtains the input from 'stdin', and provides the result to 'stdout'. The tag list is taken from the command line. The command line can also include a '-comment' specification. Ecomcon will exit(1) if there is an error. In JavaScript, it is available as the ecomcon function that takes a source string, an array of tags, and an optional array of comments. It will throw an exception if there is an error. If there is no error, it returns a string. C command line example: ---- ecomcon -comment "Devel Edition." <input >output es6 test enter exit ---- JavaScript example: ---- import ecomcon from "./ecomcon.js"; let output = ecomcon( input, ["es6", "test", "enter", "exit"], ["Devel Edition."] ); ---- input: ---- // This is a sample file. function Constructor(number) { //enter log_enter("Constructor"); function private_method() { //enter log_enter("private_method"); //nochange alert(); //exit log_exit("private_method"); } //test this.private_method = private_method; //test this.priv = function () { //enter log_enter("priv"); private_method(); //exit log_exit("priv"); } //exit log_exit("Constructor"); } //es6 export default Constructor; //legacy module.exports = Constructor; ---- output: ---- // Devel Edition. // This is a sample file. function Constructor(number) { log_enter("Constructor"); function private_method() { log_enter("private_method"); log_exit("private_method"); } this.private_method = private_method; this.priv = function () { log_enter("priv"); private_method(); log_exit("priv"); } log_exit("Constructor"); } export default Constructor; ---- input, lightly minified: ---- function Constructor(number) { function private_method() { } this.priv = function () { private_method(); } } ----
About
Enable Comments Conditionally
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published