Skip to content

douglascrockford/ecomcon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

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

No packages published