diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 17948db683a..2a2efd1dcbd 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -643,7 +643,8 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string if (mUnusedFunctionsCheck && mSettings.useSingleJob() && mSettings.buildDir.empty()) { // this is not a real source file - we just want to tokenize it. treat it as C anyways as the language needs to be determined. Tokenizer tokenizer(mSettings, *this); - tokenizer.list.setLang(Standards::Language::C); + // enforce the language since markup files are special and do not adhere to the enforced language + tokenizer.list.setLang(Standards::Language::C, true); if (fileStream) { tokenizer.list.createTokens(*fileStream, filename); } diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 25d1764f830..d4afc1fb812 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -2180,10 +2180,13 @@ bool TokenList::isCPP() const return mLang == Standards::Language::CPP; } -void TokenList::setLang(Standards::Language lang) +void TokenList::setLang(Standards::Language lang, bool force) { ASSERT_LANG(lang != Standards::Language::None); - ASSERT_LANG(mLang == Standards::Language::None); + if (!force) + { + ASSERT_LANG(mLang == Standards::Language::None); + } mLang = lang; } diff --git a/lib/tokenlist.h b/lib/tokenlist.h index c03cf3b6382..66bb008b783 100644 --- a/lib/tokenlist.h +++ b/lib/tokenlist.h @@ -68,7 +68,8 @@ class CPPCHECKLIB TokenList { /** @return true if the code is C++ */ bool isCPP() const; - void setLang(Standards::Language lang); + // TODO: get rid of this + void setLang(Standards::Language lang, bool force = false); /** * Delete all tokens in given token list diff --git a/test/cli/other_test.py b/test/cli/other_test.py index 1ac8e4a341e..5fd2e2b82fe 100644 --- a/test/cli/other_test.py +++ b/test/cli/other_test.py @@ -1357,4 +1357,26 @@ def test_rule(tmpdir): lines = stderr.splitlines() assert lines == [ "{}:4:0: style: found 'f' [rule]".format(test_file) - ] \ No newline at end of file + ] + + +def test_markup_lang(tmpdir): + test_file_1 = os.path.join(tmpdir, 'test_1.qml') + with open(test_file_1, 'wt') as f: + pass + test_file_2 = os.path.join(tmpdir, 'test_2.cpp') + with open(test_file_2, 'wt') as f: + pass + + # do not assert processing markup file with enforced language + args = [ + '--library=qt', + '--enable=unusedFunction', + '--language=c++', + '-j1', + test_file_1, + test_file_2 + ] + + exitcode, stdout, _ = cppcheck(args) + assert exitcode == 0, stdout