-
Notifications
You must be signed in to change notification settings - Fork 8
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