Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/LibreOffice/compilerplugins/clang/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 3 kB image not shown  

Quelle  pluginhandler.hxx   Sprache: C

 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * Based on LLVM/Clang.
 *
 * This file is distributed under the University of Illinois Open Source
 * License. See LICENSE.TXT for details.
 *
 */


#pragma once

#include <cstddef>
#include <functional>
#include <memory>
#include <set>
#include <unordered_map>

#include <clang/AST/ASTConsumer.h>
#include <clang/Frontend/CompilerInstance.h>
#include <clang/Frontend/FrontendAction.h>
#include <clang/Rewrite/Core/Rewriter.h>

using namespace clang;

namespace std {

template<> struct hash<::clang::SourceLocation> {
    size_t operator ()(::clang::SourceLocation loc) const
    { return loc.getRawEncoding(); }
};

}

namespace loplugin
{

class Plugin;
struct InstantiationData;

// Used internally by PluginHandler::isAllRelevantCodeDefined and its (free) helper functions:
typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap;

/**
 Class that manages all LO modules.
*/

class PluginHandler
    : public ASTConsumer
{
public:
    PluginHandler( CompilerInstance& compiler, const std::vector< std::string >& args );
    virtual ~PluginHandler();
    virtual void HandleTranslationUnit( ASTContext& context ) override;
    static void registerPlugin( Plugin* (*create)( const InstantiationData& ), const char* optionName,
        bool isPPCallback, bool isSharedPlugin, bool byDefault );
    DiagnosticBuilder report( DiagnosticsEngine::Level level, const char * plugin, StringRef message,
            CompilerInstance& compiler, SourceLocation loc = SourceLocation());
    bool ignoreLocation(SourceLocation loc);
    bool isDebugMode() const { return debugMode; }
    static bool isUnitTestMode();
    // If we overlap with a previous area we modified, we cannot perform this change
    // without corrupting the source
    bool checkOverlap(SourceRange range);
    void addSourceModification(SourceRange range);
    StringRef const& getMainFileName() const { return mainFileName; }

    // Is all code that could see `decl` defined in this TU?
    bool isAllRelevantCodeDefined(NamedDecl const * decl);

    void enableTreeWideAnalysisMode() { treeWideAnalysisMode = true; }

private:
    void handleOption( const std::string& option );
    void createPlugins( std::set< std::string > rewriters );
    DiagnosticBuilder report( DiagnosticsEngine::Level level, StringRef message, SourceLocation loc = SourceLocation());
    bool checkIgnoreLocation(SourceLocation loc);
    CompilerInstance& compiler;
    StringRef const mainFileName;
    std::unordered_map<SourceLocation, bool> ignored_;
    Rewriter rewriter;
    std::string scope;
    std::string warningsOnly;
    bool warningsAsErrors;
    bool debugMode = false;
    //// Used by the tree-wide analysis plugins like unusedmethods, etc.
    bool treeWideAnalysisMode = false;
    std::vector<std::pair<char const*, char const*>> mvModifiedRanges;

    // Used internally by isAllRelevantCodeDefined:
    RecordCompleteMap RecordsComplete_;
    RecordCompleteMap MNCComplete_;
};

/**
 The Clang plugin class, just forwards to PluginHandler.
*/

class LibreOfficeAction
    : public PluginASTAction
{
public:
    virtual std::unique_ptr<ASTConsumer> CreateASTConsumer( CompilerInstance& Compiler, StringRef InFile );

    virtual bool ParseArgs( const CompilerInstance& CI, const std::vector< std::string >&&nbsp;args );
private:
    std::vector< std::string > _args;
};

}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=97 H=98 G=97

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.