Affects PMD Version:
6.13.0
Description:
C++ has support for raw string literals (see https://en.cppreference.com/w/cpp/language/string_literal). It seems like CPD doesn't support these properly when they span multiple lines.
Code Sample demonstrating the issue:
const char* qml = R"QML(
import QtQuick 2.6
import QtQuick.Controls 1.5
import QtQuick.Layouts 1.3
Item {
ApplicationWindow {
visible : true
width : 800
height : 600
title : qsTr( "A" )
}
}
)QML";
Running PMD through: CLI
net.sourceforge.pmd.lang.ast.TokenMgrError: Lexical error in file /tmp/cpd/21920/QML.cpp at line 1, column 29. Encountered: "\n" (10), after : "\"QML("
at net.sourceforge.pmd.lang.cpp.ast.CppParserTokenManager.getNextToken(CppParserTokenManager.java:1837)
at net.sourceforge.pmd.lang.cpp.CppTokenManager.getNextToken(CppTokenManager.java:30)
at net.sourceforge.pmd.cpd.token.internal.BaseTokenFilter.getNextToken(BaseTokenFilter.java:30)
at net.sourceforge.pmd.cpd.internal.JavaCCTokenizer.tokenize(JavaCCTokenizer.java:40)
at net.sourceforge.pmd.cpd.CPD.addAndThrowLexicalError(CPD.java:142)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:137)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:107)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:69)
at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:79)
at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:64)
at net.sourceforge.pmd.cpd.CPDCommandLineInterface.addSourcesFilesToCPD(CPDCommandLineInterface.java:133)
at net.sourceforge.pmd.cpd.CPDCommandLineInterface.addSourceFilesToCPD(CPDCommandLineInterface.java:113)
at net.sourceforge.pmd.cpd.CPDCommandLineInterface.main(CPDCommandLineInterface.java:86)
at net.sourceforge.pmd.cpd.CPD.main(CPD.java:177)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4