Skip to content

Commit

Permalink
fix(parser): hook point of parser
Browse files Browse the repository at this point in the history
  • Loading branch information
h13i32maru committed Apr 22, 2017
1 parent df79107 commit df924f6
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 17 deletions.
15 changes: 13 additions & 2 deletions src/ESDoc.js
Expand Up @@ -321,6 +321,17 @@ export default class ESDoc {
static: true,
access: 'public'
});
} else {
results.push({
kind: 'manualIndex',
globalIndex: false,
coverage: config.manual.coverage,
content: null,
longname: '', // longname does not must be null.
name: config.manual.index,
static: true,
access: 'public'
});
}

if (config.manual.asset) {
Expand Down Expand Up @@ -355,7 +366,7 @@ export default class ESDoc {

static _publish(config) {
try {
const write = (content, filePath) =>{
const write = (filePath, content, option) =>{
const _filePath = path.resolve(config.destination, filePath);
content = Plugin.onHandleContent(content, _filePath);

Expand All @@ -364,7 +375,7 @@ export default class ESDoc {
if (ext === '.html') content = Plugin.onHandleHTML(content, _filePath);

console.log(`output: ${_filePath}`);
fs.outputFileSync(_filePath, content);
fs.outputFileSync(_filePath, content, option);
};

const copy = (srcPath, destPath) => {
Expand Down
6 changes: 3 additions & 3 deletions src/Parser/ESParser.js
Expand Up @@ -19,12 +19,12 @@ export default class ESParser {
code = Plugin.onHandleCode(code, filePath);
if (code.charAt(0) === '#') code = code.replace(/^#!/, '//');

let option = {sourceType: 'module', plugins: []};
let parserOption = {sourceType: 'module', plugins: []};
let parser = (code) => {
return babylon.parse(code, option);
return babylon.parse(code, parserOption);
};

({parser, option} = Plugin.onHandleCodeParser(parser, option, filePath, code));
({parser, parserOption} = Plugin.onHandleCodeParser(parser, parserOption, filePath, code));

let ast = parser(code);

Expand Down
28 changes: 17 additions & 11 deletions src/Plugin/Plugin.js
Expand Up @@ -16,17 +16,16 @@ class Plugin {
* @param {Array<{name: string, option: object}>} plugins - expect config.plugins property.
*/
init(plugins = []) {
this._plugins = copy(plugins);
this.onHandlePlugins(plugins);
}

/**
* exec plugin handler.
* @param {string} handlerName - handler name(e.g. onHandleCode)
* @param {PluginEvent} ev - plugin event object.
* @param {boolean} [giveOption=false] - if true, event has plugin option.
* @private
*/
_execHandler(handlerName, ev, giveOption = false) {
_execHandler(handlerName, ev) {
/* eslint-disable global-require */
for (const item of this._plugins) {
let plugin;
Expand All @@ -41,18 +40,24 @@ class Plugin {

if (!plugin[handlerName]) continue;

if (giveOption) ev.data.option = item.option;

ev.data.option = item.option;
plugin[handlerName](ev);
}
}

onHandlePlugins(plugins) {
this._plugins = plugins;
const ev = new PluginEvent({plugins});
this._execHandler('onHandlePlugins', ev);
this._plugins = ev.data.plugins;
}

/**
* handle start.
*/
onStart() {
const ev = new PluginEvent();
this._execHandler('onStart', ev, true);
this._execHandler('onStart', ev);
}

/**
Expand Down Expand Up @@ -82,16 +87,16 @@ class Plugin {
/**
* handle code parser.
* @param {function(code: string)} parser - original js parser.
* @param {object} option - default babylon options.
* @param {object} parserOption - default babylon options.
* @param {string} filePath - source code file path.
* @param {string} code - original code.
* @returns {{parser: function(code: string), option: Object}} handled parser.
* @returns {{parser: function(code: string), parserOption: Object}} handled parser.
*/
onHandleCodeParser(parser, option, filePath, code) {
onHandleCodeParser(parser, parserOption, filePath, code) {
const ev = new PluginEvent();
ev.data = {parser, option, filePath, code};
ev.data = {parser, parserOption, filePath, code};
this._execHandler('onHandleCodeParser', ev);
return {parser: ev.data.parser, option: ev.data.option};
return {parser: ev.data.parser, parserOption: ev.data.parserOption};
}

/**
Expand Down Expand Up @@ -131,6 +136,7 @@ class Plugin {

// hack: fixme
ev.data.writeFile = writeFile;
ev.data.copyFile = copyDir;
ev.data.copyDir = copyDir;
ev.data.readFile = readFile;

Expand Down
2 changes: 1 addition & 1 deletion test/fixture/package/plugin/MyPlugin1.js
Expand Up @@ -39,7 +39,7 @@ exports.onHandleTag = function(ev) {

exports.onPublish = function(ev) {
callInfo.handlerNames.onPublish = ['MyPlugin1'];
ev.data.writeFile('<html><head><meta charset="utf=8"/></head><body>content was made by MyPlugin1.onPublish</body></html>', 'index.html');
ev.data.writeFile('index.html', '<html><head><meta charset="utf=8"/></head><body>content was made by MyPlugin1.onPublish</body></html>');
};

exports.onHandleContent = function(ev) {
Expand Down

0 comments on commit df924f6

Please sign in to comment.