12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // Copyright (c) Microsoft Corporation.
- // Licensed under the MIT License.
- /**
- * @fileoverview Common utils for AST.
- */
- "use strict";
- module.exports = {
- isTypeScriptParserServices(parserServices) {
- // Check properties specific to @typescript-eslint/parser
- return (
- parserServices &&
- parserServices.program &&
- parserServices.esTreeNodeToTSNodeMap &&
- parserServices.tsNodeToESTreeNodeMap
- );
- },
- hasFullTypeInformation(context) {
- var hasFullTypeInformation = (
- context &&
- this.isTypeScriptParserServices(context.parserServices) &&
- context.parserServices.hasFullTypeInformation === true
- );
- return hasFullTypeInformation;
- },
- getFullTypeChecker(context) {
- return this.hasFullTypeInformation(context) ? context.parserServices.program.getTypeChecker() : null;
- },
- getNodeTypeAsString(fullTypeChecker, node, context) {
- if (fullTypeChecker && node) {
- const tsNode = context.parserServices.esTreeNodeToTSNodeMap.get(node);
- const tsType = fullTypeChecker.getTypeAtLocation(tsNode);
- const type = fullTypeChecker.typeToString(tsType);
- return type;
- }
- return "any";
- },
- isDocumentObject(node, context, fullTypeChecker) {
- if (fullTypeChecker) {
- const type = this.getNodeTypeAsString(fullTypeChecker, node, context);
- return (type === "Document");
- }
- // Best-effort checking without Type information
- switch (node.type) {
- case "Identifier":
- return node != undefined && node.name == "document";
- case "MemberExpression":
- return (
- node != undefined &&
- node.property != undefined &&
- node.property.name == "document" && (
- (node.object != undefined &&
- typeof node.object.name === "string" &&
- node.object.name.toLowerCase().endsWith('window')) ||
- (
- node.object != undefined &&
- node.object.property != undefined &&
- node.object.property.name == "window" &&
- (
- (node.object.object != undefined && node.object.object.type == "ThisExpression") ||
- (node.object.object != undefined && node.object.object.name == "globalThis")
- )
- )
- )
- );
- };
- return false;
- }
- };
|