UNPKG

astx

Version:

super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring

108 lines (97 loc) 11.1 kB
import compileMatcher from './index.mjs' import compilePlaceholderMatcher, { unescapeIdentifier, } from './Placeholder.mjs' export default function compileIdentifierMatcher(path, compileOptions) { const pattern = path.value const n = compileOptions.backend.t.namedTypes const typeAnnotation = path.get('typeAnnotation') const placeholderMatcher = compilePlaceholderMatcher( path, pattern.name, compileOptions, { nodeType: 'Identifier', getCondition: () => [ ...[ [n.VariableDeclarator, 'id'], [n.Function, 'id'], [n.CallExpression, 'callee'], [n.MemberExpression, 'object'], [n.MemberExpression, 'property'], [n.ObjectProperty, 'key'], [n.ObjectProperty, 'value'], [n.SpreadElement, 'argument'], [n.Class, 'id'], [n.Class, 'superClass'], [n.TypeAlias, 'id'], [n.TSTypeAliasDeclaration, 'id'], [n.ObjectTypeProperty, 'key'], [n.ObjectTypeProperty, 'value'], ].map(([type, field]) => (path) => { var _path$parent return ( type.check( (_path$parent = path.parent) === null || _path$parent === void 0 ? void 0 : _path$parent.value ) && path.name === field ) }), ...[[n.TSFunctionType, 'parameters']].map( ([type, field]) => (path) => { var _path$parent2, _path$parentPath return ( type.check( (_path$parent2 = path.parent) === null || _path$parent2 === void 0 ? void 0 : _path$parent2.value ) && ((_path$parentPath = path.parentPath) === null || _path$parentPath === void 0 ? void 0 : _path$parentPath.name) === field ) } ), ].find((cond) => cond(path)), } ) if (placeholderMatcher) { const { placeholder } = placeholderMatcher if (typeAnnotation && typeAnnotation.value) { const typeAnnotationMatcher = compileMatcher( typeAnnotation, compileOptions ) return { ...placeholderMatcher, match: (path, matchSoFar) => { var _matchSoFar$captures matchSoFar = placeholderMatcher.match(path, matchSoFar) if (matchSoFar == null) return null const captured = placeholder ? (_matchSoFar$captures = matchSoFar.captures) === null || _matchSoFar$captures === void 0 ? void 0 : _matchSoFar$captures[placeholder] : null if (captured) { captured.node.astx = { excludeTypeAnnotationFromCapture: true, } } return typeAnnotationMatcher.match( path.get('typeAnnotation'), matchSoFar ) }, } } return placeholderMatcher } pattern.name = unescapeIdentifier(pattern.name) } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlTWF0Y2hlciIsImNvbXBpbGVQbGFjZWhvbGRlck1hdGNoZXIiLCJ1bmVzY2FwZUlkZW50aWZpZXIiLCJjb21waWxlSWRlbnRpZmllck1hdGNoZXIiLCJwYXRoIiwiY29tcGlsZU9wdGlvbnMiLCJwYXR0ZXJuIiwidmFsdWUiLCJuIiwiYmFja2VuZCIsInQiLCJuYW1lZFR5cGVzIiwidHlwZUFubm90YXRpb24iLCJnZXQiLCJwbGFjZWhvbGRlck1hdGNoZXIiLCJuYW1lIiwibm9kZVR5cGUiLCJnZXRDb25kaXRpb24iLCJWYXJpYWJsZURlY2xhcmF0b3IiLCJGdW5jdGlvbiIsIkNhbGxFeHByZXNzaW9uIiwiTWVtYmVyRXhwcmVzc2lvbiIsIk9iamVjdFByb3BlcnR5IiwiU3ByZWFkRWxlbWVudCIsIkNsYXNzIiwiVHlwZUFsaWFzIiwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiIsIk9iamVjdFR5cGVQcm9wZXJ0eSIsIm1hcCIsInR5cGUiLCJmaWVsZCIsImNoZWNrIiwicGFyZW50IiwiVFNGdW5jdGlvblR5cGUiLCJwYXJlbnRQYXRoIiwiZmluZCIsImNvbmQiLCJwbGFjZWhvbGRlciIsInR5cGVBbm5vdGF0aW9uTWF0Y2hlciIsIm1hdGNoIiwibWF0Y2hTb0ZhciIsImNhcHR1cmVkIiwiY2FwdHVyZXMiLCJub2RlIiwiYXN0eCIsImV4Y2x1ZGVUeXBlQW5ub3RhdGlvbkZyb21DYXB0dXJlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBpbGVNYXRjaGVyL0lkZW50aWZpZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSWRlbnRpZmllciwgTm9kZVBhdGggfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCBjb21waWxlTWF0Y2hlciwgeyBDb21waWxlZE1hdGNoZXIsIENvbXBpbGVPcHRpb25zLCBNYXRjaFJlc3VsdCB9IGZyb20gJy4nXG5pbXBvcnQgY29tcGlsZVBsYWNlaG9sZGVyTWF0Y2hlciwgeyB1bmVzY2FwZUlkZW50aWZpZXIgfSBmcm9tICcuL1BsYWNlaG9sZGVyJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21waWxlSWRlbnRpZmllck1hdGNoZXIoXG4gIHBhdGg6IE5vZGVQYXRoPElkZW50aWZpZXIsIElkZW50aWZpZXI+LFxuICBjb21waWxlT3B0aW9uczogQ29tcGlsZU9wdGlvbnNcbik6IENvbXBpbGVkTWF0Y2hlciB8IHZvaWQge1xuICBjb25zdCBwYXR0ZXJuOiBJZGVudGlmaWVyID0gcGF0aC52YWx1ZVxuICBjb25zdCBuID0gY29tcGlsZU9wdGlvbnMuYmFja2VuZC50Lm5hbWVkVHlwZXNcblxuICBjb25zdCB0eXBlQW5ub3RhdGlvbiA9IHBhdGguZ2V0KCd0eXBlQW5ub3RhdGlvbicpXG5cbiAgY29uc3QgcGxhY2Vob2xkZXJNYXRjaGVyID0gY29tcGlsZVBsYWNlaG9sZGVyTWF0Y2hlcihcbiAgICBwYXRoLFxuICAgIHBhdHRlcm4ubmFtZSxcbiAgICBjb21waWxlT3B0aW9ucyxcbiAgICB7XG4gICAgICBub2RlVHlwZTogJ0lkZW50aWZpZXInLFxuICAgICAgZ2V0Q29uZGl0aW9uOiAoKSA9PlxuICAgICAgICBbXG4gICAgICAgICAgLi4uW1xuICAgICAgICAgICAgW24uVmFyaWFibGVEZWNsYXJhdG9yLCAnaWQnXSxcbiAgICAgICAgICAgIFtuLkZ1bmN0aW9uLCAnaWQnXSxcbiAgICAgICAgICAgIFtuLkNhbGxFeHByZXNzaW9uLCAnY2FsbGVlJ10sXG4gICAgICAgICAgICBbbi5NZW1iZXJFeHByZXNzaW9uLCAnb2JqZWN0J10sXG4gICAgICAgICAgICBbbi5NZW1iZXJFeHByZXNzaW9uLCAncHJvcGVydHknXSxcbiAgICAgICAgICAgIFtuLk9iamVjdFByb3BlcnR5LCAna2V5J10sXG4gICAgICAgICAgICBbbi5PYmplY3RQcm9wZXJ0eSwgJ3ZhbHVlJ10sXG4gICAgICAgICAgICBbbi5TcHJlYWRFbGVtZW50LCAnYXJndW1lbnQnXSxcbiAgICAgICAgICAgIFsobiBhcyBhbnkpLkNsYXNzLCAnaWQnXSxcbiAgICAgICAgICAgIFsobiBhcyBhbnkpLkNsYXNzLCAnc3VwZXJDbGFzcyddLFxuICAgICAgICAgICAgW24uVHlwZUFsaWFzLCAnaWQnXSxcbiAgICAgICAgICAgIFtuLlRTVHlwZUFsaWFzRGVjbGFyYXRpb24sICdpZCddLFxuICAgICAgICAgICAgW24uT2JqZWN0VHlwZVByb3BlcnR5LCAna2V5J10sXG4gICAgICAgICAgICBbbi5PYmplY3RUeXBlUHJvcGVydHksICd2YWx1ZSddLFxuICAgICAgICAgIF0ubWFwKFxuICAgICAgICAgICAgKFt0eXBlLCBmaWVsZF0pID0+XG4gICAgICAgICAgICAgIChwYXRoOiBOb2RlUGF0aCkgPT5cbiAgICAgICAgICAgICAgICAodHlwZSBhcyBhbnkpLmNoZWNrKHBhdGgucGFyZW50Py52YWx1ZSkgJiYgcGF0aC5uYW1lID09PSBmaWVsZFxuICAgICAgICAgICksXG4gICAgICAgICAgLi4uW1tuLlRTRnVuY3Rpb25UeXBlLCAncGFyYW1ldGVycyddXS5tYXAoXG4gICAgICAgICAgICAoW3R5cGUsIGZpZWxkXSkgPT5cbiAgICAgICAgICAgICAgKHBhdGg6IE5vZGVQYXRoKSA9PlxuICAgICAgICAgICAgICAgICh0eXBlIGFzIGFueSkuY2hlY2socGF0aC5wYXJlbnQ/LnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHBhdGgucGFyZW50UGF0aD8ubmFtZSA9PT0gZmllbGRcbiAgICAgICAgICApLFxuICAgICAgICBdLmZpbmQoKGNvbmQpID0+IGNvbmQocGF0aCkpLFxuICAgIH1cbiAgKVxuXG4gIGlmIChwbGFjZWhvbGRlck1hdGNoZXIpIHtcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyIH0gPSBwbGFjZWhvbGRlck1hdGNoZXJcblxuICAgIGlmICh0eXBlQW5ub3RhdGlvbiAmJiB0eXBlQW5ub3RhdGlvbi52YWx1ZSkge1xuICAgICAgY29uc3QgdHlwZUFubm90YXRpb25NYXRjaGVyID0gY29tcGlsZU1hdGNoZXIoXG4gICAgICAgIHR5cGVBbm5vdGF0aW9uLFxuICAgICAgICBjb21waWxlT3B0aW9uc1xuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wbGFjZWhvbGRlck1hdGNoZXIsXG5cbiAgICAgICAgbWF0Y2g6IChwYXRoOiBOb2RlUGF0aCwgbWF0Y2hTb0ZhcjogTWF0Y2hSZXN1bHQpOiBNYXRjaFJlc3VsdCA9PiB7XG4gICAgICAgICAgbWF0Y2hTb0ZhciA9IHBsYWNlaG9sZGVyTWF0Y2hlci5tYXRjaChwYXRoLCBtYXRjaFNvRmFyKVxuXG4gICAgICAgICAgaWYgKG1hdGNoU29GYXIgPT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgICAgIGNvbnN0IGNhcHR1cmVkID0gcGxhY2Vob2xkZXJcbiAgICAgICAgICAgID8gbWF0Y2hTb0Zhci5jYXB0dXJlcz8uW3BsYWNlaG9sZGVyXVxuICAgICAgICAgICAgOiBudWxsXG5cbiAgICAgICAgICBpZiAoY2FwdHVyZWQpIHtcbiAgICAgICAgICAgIDsoY2FwdHVyZWQubm9kZSBhcyBhbnkpLmFzdHggPSB7XG4gICAgICAgICAgICAgIGV4Y2x1ZGVUeXBlQW5ub3RhdGlvbkZyb21DYXB0dXJlOiB0cnVlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0eXBlQW5ub3RhdGlvbk1hdGNoZXIubWF0Y2goXG4gICAgICAgICAgICBwYXRoLmdldCgndHlwZUFubm90YXRpb24nKSxcbiAgICAgICAgICAgIG1hdGNoU29GYXJcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyTWF0Y2hlclxuICB9XG5cbiAgcGF0dGVybi5uYW1lID0gdW5lc2NhcGVJZGVudGlmaWVyKHBhdHRlcm4ubmFtZSlcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU9BLGNBQVAsTUFBNkUsR0FBN0U7QUFDQSxPQUFPQyx5QkFBUCxJQUFvQ0Msa0JBQXBDLFFBQThELGVBQTlEOztBQUVB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