1/** 2 * Copyright (c) 2021 - 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "program.h" 17 18#include "varbinder/varbinder.h" 19#include "varbinder/ETSBinder.h" 20#include "ir/astDump.h" 21#include "ir/base/classDefinition.h" 22#include "ir/statements/blockStatement.h" 23 24namespace ark::es2panda::parser { 25 26std::string Program::Dump() const 27{ 28 ir::AstDumper dumper {ast_, SourceCode()}; 29 return dumper.Str(); 30} 31 32void Program::DumpSilent() const 33{ 34 [[maybe_unused]] ir::AstDumper dumper {ast_, SourceCode()}; 35 ASSERT(!dumper.Str().empty()); 36} 37 38varbinder::ClassScope *Program::GlobalClassScope() 39{ 40 return globalClass_->Scope()->AsClassScope(); 41} 42 43const varbinder::ClassScope *Program::GlobalClassScope() const 44{ 45 return globalClass_->Scope()->AsClassScope(); 46} 47 48varbinder::GlobalScope *Program::GlobalScope() 49{ 50 ASSERT(ast_->Scope()->IsGlobalScope() || ast_->Scope()->IsModuleScope()); 51 return static_cast<varbinder::GlobalScope *>(ast_->Scope()); 52} 53 54const varbinder::GlobalScope *Program::GlobalScope() const 55{ 56 ASSERT(ast_->Scope()->IsGlobalScope() || ast_->Scope()->IsModuleScope()); 57 return static_cast<const varbinder::GlobalScope *>(ast_->Scope()); 58} 59 60void Program::SetDeclarationModuleInfo() 61{ 62 bool onlyDeclarations = true; 63 for (auto stmt : ast_->Statements()) { 64 if (stmt->IsDeclare() || stmt->IsTSTypeAliasDeclaration()) { 65 continue; 66 } 67 onlyDeclarations = false; 68 break; 69 } 70 moduleInfo_.isDeclModule = onlyDeclarations; 71} 72 73void Program::AddNodeToETSNolintCollection(const ir::AstNode *node, const std::set<ETSWarnings> &warningsCollection) 74{ 75 ArenaSet<ETSWarnings> tmp(allocator_->Adapter()); 76 tmp.insert(warningsCollection.begin(), warningsCollection.end()); 77 etsnolintCollection_.insert({node, tmp}); 78} 79 80bool Program::NodeContainsETSNolint(const ir::AstNode *node, ETSWarnings warning) 81{ 82 auto nodeEtsnolints = etsnolintCollection_.find(node); 83 if (nodeEtsnolints == etsnolintCollection_.end()) { 84 return false; 85 } 86 87 return nodeEtsnolints->second.find(warning) != nodeEtsnolints->second.end(); 88} 89 90} // namespace ark::es2panda::parser 91