more reliable toValidIdentifier checking, including reserved words

This commit is contained in:
Sebastian McKenzie 2015-01-05 10:22:06 +11:00
parent 90ce4e93ed
commit 9fd1ec0596

View File

@ -3,6 +3,10 @@ var _ = require("lodash");
var t = exports;
t.NATIVE_TYPES_NAMES = ["Array", "Object", "Number", "Boolean", "Date", "Array", "String"];
//
var addAssert = function (type, is) {
t["assert" + type] = function (node, opts) {
opts = opts || {};
@ -214,7 +218,7 @@ t.isReferenced = function (node, parent) {
*/
t.isValidIdentifier = function (name) {
return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isKeywordES6(name, true);
return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isReservedWordES6(name, true);
};
/*
@ -227,6 +231,8 @@ t.isValidIdentifier = function (name) {
t.toIdentifier = function (name) {
if (t.isIdentifier(name)) return name.name;
name = name + "";
// replace all non-valid identifiers with dashes
name = name.replace(/[^a-zA-Z0-9$_]/g, "-");
@ -241,6 +247,10 @@ t.toIdentifier = function (name) {
// remove underscores from start of name
name = name.replace(/^\_/, "");
if (!t.isValidIdentifier(name)) {
name = "_" + name;
}
return name || '_';
};