//===--- SourceMgrUtils.h - SourceMgr LSP Utils -----------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains an array of generally useful SourceMgr utilities for // interacting with LSP components. // //===----------------------------------------------------------------------===// #ifndef LIB_MLIR_TOOLS_LSPSERVERSUPPORT_TRANSPORT_H_ #define LIB_MLIR_TOOLS_LSPSERVERSUPPORT_TRANSPORT_H_ #include "Protocol.h" #include "llvm/Support/SourceMgr.h" namespace mlir { namespace lsp { //===----------------------------------------------------------------------===// // Utils //===----------------------------------------------------------------------===// /// Returns the range of a lexical token given a SMLoc corresponding to the /// start of an token location. The range is computed heuristically, and /// supports identifier-like tokens, strings, etc. SMRange convertTokenLocToRange(SMLoc loc); //===----------------------------------------------------------------------===// // SourceMgrInclude //===----------------------------------------------------------------------===// /// This class represents a single include within a root file. struct SourceMgrInclude { SourceMgrInclude(const lsp::URIForFile &uri, const lsp::Range &range) : uri(uri), range(range) {} /// Build a hover for the current include file. Hover buildHover() const; /// The URI of the file that is included. lsp::URIForFile uri; /// The range of the include directive. lsp::Range range; }; /// Given a source manager, gather all of the processed include files. These are /// assumed to be all of the files other than the main root file. void gatherIncludeFiles(llvm::SourceMgr &sourceMgr, SmallVectorImpl &includes); } // namespace lsp } // namespace mlir #endif