1 //===--- CollectMacros.cpp ---------------------------------------*- C++-*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "CollectMacros.h" 10 #include "clang/Basic/SourceLocation.h" 11 #include "clang/Lex/Lexer.h" 12 13 namespace clang { 14 namespace clangd { 15 add(const Token & MacroNameTok,const MacroInfo * MI)16void CollectMainFileMacros::add(const Token &MacroNameTok, 17 const MacroInfo *MI) { 18 if (!InMainFile) 19 return; 20 auto Loc = MacroNameTok.getLocation(); 21 if (Loc.isInvalid() || Loc.isMacroID()) 22 return; 23 24 auto Name = MacroNameTok.getIdentifierInfo()->getName(); 25 Out.Names.insert(Name); 26 auto Range = halfOpenToRange( 27 SM, CharSourceRange::getCharRange(Loc, MacroNameTok.getEndLoc())); 28 if (auto SID = getSymbolID(Name, MI, SM)) 29 Out.MacroRefs[SID].push_back(Range); 30 else 31 Out.UnknownMacros.push_back(Range); 32 } 33 } // namespace clangd 34 } // namespace clang 35