首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当修复时,clang-整齐插入多个“覆盖”说明符。

当修复时,clang-整齐插入多个“覆盖”说明符。
EN

Stack Overflow用户
提问于 2018-10-28 15:04:18
回答 2查看 845关注 0票数 5

我有一个cmake项目,我想使用clang-tidy实现现代化。为了避免一次发生太多事情,我只激活了modernize-use-override选项。然而,当我应用这一点时:

代码语言:javascript
复制
$> run-clang-tidy  -header-filter='.*'  -checks='-*, modernize-use-override' -fix

对于项目,clang-tidy插入override说明符的多个实例,例如:

代码语言:javascript
复制
void update_sizes() override override override etc.

我尝试遵循给这里的建议,并使用cmake创建一个json编译命令数据库:

代码语言:javascript
复制
$>cmake ../../ -DCMAKE_BUILD_TYPE=debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

通过将cmake设置为系统范围内的默认设置(使用update-alternative),我确保了clang编译器实际上是在拾取它。在这种情况下,cmake生成调用clang编译器的make文件。

我用的是Ubuntu 18.10和clang 7。

我也尝试过使用clang-6和设置cmake来生成ninja构建脚本,而不是make文件,但是结果总是一样的。

在应用修复之前,整个项目都可以使用gccclang进行良好的编译。

请注意,有一个类似的讨论这里,但建议是使用run-clang-tidy.py,这正是我正在做的。因此,我不认为这是重复的。

EN

回答 2

Stack Overflow用户

发布于 2018-11-05 13:36:01

这是您链接到的讨论中引用的相同问题,在我看来,它就像一个bug。你有几种选择:

  1. 把这个报告给clang听。等很久。
  2. 你自己去修理窃听器。投入大量的时间。
  3. 使用任何有能力对多个文件/目录(例如Notepad++)进行文本替换的工具。查找并将所有“覆盖覆盖”事件替换为“覆盖”。重复,直到没有更多的发生。为你所用的溶液的丑陋而颤抖。:)
票数 3
EN

Stack Overflow用户

发布于 2020-11-02 17:12:19

这是一个很老的问题,但clang 11中仍然存在问题,问题在于clang存储头文件路径的方式。在yaml文件中可以很容易地看到这一点。

在第一个yaml文件中:

'C:/SOURCES/APP/COMMON/CORE/../../../Libs/Sdk/Public/File.h‘:FilePath

在secod yaml文件中:

'C:/SOURCES/APP/COMMON/APPCORE/VIEWS/../../../../Libs/Sdk/Public/File.h‘:FilePath

上面的路径是相同的,但不是“clang应用替换”。

解决此问题的最简单方法是修改脚本“run-clang-tidy.py”,以便在运行“clang替代”之前修复yaml文件中的所有路径。

代码语言:javascript
复制
def FixPath(line):
    value = line.find("'")
    if value != -1:
        left = line[:value]
        right = line[value+1:len(line)-2]
        right = "'" + os.path.normpath(right) + "'"
        line = left + right.lower() + "\n"
    return line

def FixYamlContent(tmpdir):
    for replacefile in glob.iglob(os.path.join(tmpdir, '*.yaml')):
        with open(replacefile, "r+") as file_rw:
            lines = []
            for line in file_rw:
                if line.find("FilePath:") != -1:
                    line = FixPath(line)
                    
                lines.append(line)

            file_rw.seek(0)
            file_rw.writelines(lines)
            file_rw.truncate()

要使用上面的代码,您需要在函数FixYamlContent(tmpdir) apply_fixes之前调用函数。我不是python开发人员,上面的代码还没有经过充分的测试,但是您知道了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53032915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档