Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 137 lines (117 sloc) 4.805 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
/*
* Cppcheck - A tool for static C/C++ code analysis
* Copyright (C) 2007-2012 Daniel Marjamäki and Cppcheck team.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef PATH_H_INCLUDED
#define PATH_H_INCLUDED

#include <string>
#include <vector>
#include "config.h"

/// @addtogroup Core
/// @{


/**
* @brief Path handling routines.
* Internally cppcheck wants to store paths with / separator which is also
* native separator for Unix-derived systems. When giving path to user
* or for other functions we convert path separators back to native type.
*/
class CPPCHECKLIB Path {
public:
    /**
* Convert path to use native separators.
* @param path Path string to convert.
* @return converted path.
*/
    static std::string toNativeSeparators(std::string path);

    /**
* Convert path to use internal path separators.
* @param path Path string to convert.
* @return converted path.
*/
    static std::string fromNativeSeparators(std::string path);

    /**
* @brief Simplify path "foo/bar/.." => "foo"
* @param originalPath path to be simplified, must have / -separators.
* @return simplified path
*/
    static std::string simplifyPath(const char *originalPath);

    /**
* @brief Compare filenames to see if they are the same.
* On Linux the comparison is case-sensitive. On Windows it is case-insensitive.
* @param fname1 one filename
* @param fname2 other filename
* @return true if the filenames match on the current platform
*/
    static bool sameFileName(const std::string &fname1, const std::string &fname2);

    /**
* @brief Remove quotation marks (") from the path.
* @param path path to be cleaned.
* @return Cleaned path without quotation marks.
*/
    static std::string removeQuotationMarks(std::string path);

    /**
* @brief Get an extension of the filename.
* @param path Path containing filename.
* @return Filename extension (containing the dot, e.g. ".h" or ".CPP").
*/
    static std::string getFilenameExtension(const std::string &path);

    /**
* @brief Get an extension of the filename in lower case.
* @param path Path containing filename.
* @return Filename extension (containing the dot, e.g. ".h").
*/
    static std::string getFilenameExtensionInLowerCase(const std::string &path);

    /**
* @brief Create a relative path from an absolute one, if absolute path is inside the basePaths.
* @param absolutePath Path to be made relative.
* @param basePaths Paths to which it may be made relative.
* @return relative path, if possible. Otherwise absolutePath is returned unchanged
*/
    static std::string getRelativePath(const std::string& absolutePath, const std::vector<std::string>& basePaths);

    /**
* @brief Check if the file extension indicates that it's a C/C++ source file.
* Check if the file has source file extension: *.c;*.cpp;*.cxx;*.c++;*.cc;*.txx
* @param filename filename to check
* @return returns true if the file extension indicates it should be checked
*/
    static bool acceptFile(const std::string &filename);

    /**
* @brief Identify language based on file extension.
* @param extensionInLowerCase e.g. ".c"
* @return true if extension is meant for C files
*/
    static bool isC(const std::string &extensionInLowerCase);

    /**
* @brief Identify language based on file extension.
* @param extensionInLowerCase e.g. ".cpp"
* @return true if extension is meant for C++ files
*/
    static bool isCPP(const std::string &extensionInLowerCase);

    /**
* @brief Identify language based on file extension.
* @param extensionInLowerCase e.g. ".java"
* @return true if extension is meant for Java files
*/
    static bool isJava(const std::string &extensionInLowerCase);

    /**
* @brief Identify language based on file extension.
* @param extensionInLowerCase e.g. ".cs"
* @return true if extension is meant for C# files
*/
    static bool isCSharp(const std::string &extensionInLowerCase);
};

/// @}

#endif // PATH_H_INCLUDED
Something went wrong with that request. Please try again.