Affects PMD Version: 6.26.0
Description:
CPD crashing on following file, didn't expect that. Maybe related to #2605 ?
Exception Stacktrace:
net.sourceforge.pmd.lang.ast.TokenMgrError: Lexical error in file /tmp/goIsAmazing-master/goBasis/src/fundation/5. sliceOperation/sliceOperation6.go at line 20, column 12. Encountered: token recognition error at: ''??'
at net.sourceforge.pmd.cpd.AntlrTokenizer.tokenize(AntlrTokenizer.java:44)
at net.sourceforge.pmd.cpd.CPD.addAndThrowLexicalError(CPD.java:144)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:139)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:108)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:70)
at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:80)
at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:65)
at net.sourceforge.pmd.cpd.CPDCommandLineInterface.addSourcesFilesToCPD(CPDCommandLineInterface.java:134)
at net.sourceforge.pmd.cpd.CPDCommandLineInterface.addSourceFilesToCPD(CPDCommandLineInterface.java:114)
at net.sourceforge.pmd.cpd.CPDCommandLineInterface.main(CPDCommandLineInterface.java:87)
at net.sourceforge.pmd.cpd.CPD.main(CPD.java:179)
Caused by: LexerNoViableAltException(''')
at org.antlr.v4.runtime.atn.LexerATNSimulator.failOrAccept(LexerATNSimulator.java:312)
at org.antlr.v4.runtime.atn.LexerATNSimulator.execATN(LexerATNSimulator.java:233)
at org.antlr.v4.runtime.atn.LexerATNSimulator.match(LexerATNSimulator.java:117)
at org.antlr.v4.runtime.Lexer.nextToken(Lexer.java:141)
at net.sourceforge.pmd.lang.go.antlr4.GolangLexer.nextToken(GolangLexer.java:126)
at net.sourceforge.pmd.lang.antlr.AntlrTokenManager.getNextTokenFromAnyChannel(AntlrTokenManager.java:47)
at net.sourceforge.pmd.lang.antlr.AntlrTokenManager.getNextToken(AntlrTokenManager.java:40)
at net.sourceforge.pmd.cpd.token.internal.BaseTokenFilter.getNextToken(BaseTokenFilter.java:45)
at net.sourceforge.pmd.cpd.AntlrTokenizer.tokenize(AntlrTokenizer.java:39)
... 10 more
Code Sample demonstrating the issue:
package main
import "fmt"
func main() {
//string底层是一个byte数组,因此string也可以进行切片操作
str := "hello world"//string是不可变的
slice := str[4:]
fmt.Println(slice)
//若要对string进行修改需要将string修改为byte或rune的切片在操作
//但是转为byte无法进行中文操作
bytes := []byte(str)
bytes[2] = 'x'
str = string(bytes)
fmt.Println(str)
//转换成rune可以对中文进行操作
runes := []rune(str)
runes[0] = '哈'
str = string(runes)
fmt.Println(str)
}
Steps to reproduce:
Clone linked repository and run cpd: ./run.sh cpd --files . --language go --minimum-tokens 50
Running PMD through: CLI
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