first commit
This commit is contained in:
95
build/node_modules/hydrolysis/lib/ast-utils/js-parse.js
generated
vendored
Normal file
95
build/node_modules/hydrolysis/lib/ast-utils/js-parse.js
generated
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
||||
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||||
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||||
* The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
||||
* Code distributed by Google as part of the polymer project is also
|
||||
* subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
/**
|
||||
* Finds and annotates the Polymer() and modulate() calls in javascript.
|
||||
*/
|
||||
// jshint node: true
|
||||
'use strict';
|
||||
var espree = require('espree');
|
||||
var estraverse = require('estraverse');
|
||||
|
||||
var behaviorFinder = require('./behavior-finder');
|
||||
var elementFinder = require('./element-finder');
|
||||
var featureFinder = require('./feature-finder');
|
||||
|
||||
function traverse(visitorRegistries) {
|
||||
var visitor;
|
||||
function applyVisitors(name, node, parent) {
|
||||
var returnVal;
|
||||
for (var i = 0; i < visitorRegistries.length; i++) {
|
||||
if (name in visitorRegistries[i]) {
|
||||
returnVal = visitorRegistries[i][name](node, parent);
|
||||
if (returnVal) {
|
||||
return returnVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
enter: function(node, parent) {
|
||||
visitor = 'enter' + node.type;
|
||||
return applyVisitors(visitor, node, parent);
|
||||
},
|
||||
leave: function(node, parent) {
|
||||
visitor = 'leave' + node.type;
|
||||
return applyVisitors(visitor, node, parent);
|
||||
},
|
||||
fallback: 'iteration',
|
||||
};
|
||||
}
|
||||
|
||||
var jsParse = function jsParse(jsString) {
|
||||
var script = espree.parse(jsString, {
|
||||
attachComment: true,
|
||||
comment: true,
|
||||
loc: true,
|
||||
ecmaFeatures: {
|
||||
arrowFunctions: true,
|
||||
blockBindings: true,
|
||||
destructuring: true,
|
||||
regexYFlag: true,
|
||||
regexUFlag: true,
|
||||
templateStrings: true,
|
||||
binaryLiterals: true,
|
||||
unicodeCodePointEscapes: true,
|
||||
defaultParams: true,
|
||||
restParams: true,
|
||||
forOf: true,
|
||||
objectLiteralComputedProperties: true,
|
||||
objectLiteralShorthandMethods: true,
|
||||
objectLiteralShorthandProperties: true,
|
||||
objectLiteralDuplicateProperties: true,
|
||||
generators: true,
|
||||
spread: true,
|
||||
classes: true,
|
||||
modules: true,
|
||||
jsx: true,
|
||||
globalReturn: true,
|
||||
}
|
||||
});
|
||||
|
||||
var featureInfo = featureFinder();
|
||||
var behaviorInfo = behaviorFinder();
|
||||
var elementInfo = elementFinder();
|
||||
|
||||
var visitors = [featureInfo, behaviorInfo, elementInfo].map(function(info) {
|
||||
return info.visitors;
|
||||
});
|
||||
estraverse.traverse(script, traverse(visitors));
|
||||
|
||||
return {
|
||||
behaviors: behaviorInfo.behaviors,
|
||||
elements: elementInfo.elements,
|
||||
features: featureInfo.features,
|
||||
parsedScript: script
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = jsParse;
|
||||
Reference in New Issue
Block a user