From 3c16da1b09b4a7490e2139d1ee3b96e4ed096806 Mon Sep 17 00:00:00 2001 From: Christoph Schlosser Date: Tue, 8 Oct 2019 19:13:55 +0200 Subject: End of declaration problem fixed If the terminating character is the first one on the next line it can cause the buffer to fill and thus produce malformed text to parse. --- src/Lang/Cpp/CppParser.ts | 7 +++++-- src/test/CppTests/Attributes.test.ts | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Lang/Cpp/CppParser.ts b/src/Lang/Cpp/CppParser.ts index 2ea3c3f..3b13721 100644 --- a/src/Lang/Cpp/CppParser.ts +++ b/src/Lang/Cpp/CppParser.ts @@ -401,6 +401,7 @@ export default class CppParser implements ICodeParser { nextLine = new Position(nextLine.line + 1, nextLine.character); nextLineTxt = this.activeEditor.document.lineAt(nextLine.line).text.trim(); let finalSlice = 0; + let endOfDeclaration = false; // Check if method has finished if curly brace is opened while // nesting is occuring. @@ -411,11 +412,13 @@ export default class CppParser implements ICodeParser { currentNest--; } else if (nextLineTxt[i] === "{" && currentNest === 0) { finalSlice = i; + endOfDeclaration = true; break; } else if ((nextLineTxt[i] === ";" || (nextLineTxt[i] === ":" && nextLineTxt[i - 1] !== ":" && nextLineTxt[i + 1] !== ":")) && currentNest === 0) { finalSlice = i; + endOfDeclaration = true; break; } } @@ -428,7 +431,7 @@ export default class CppParser implements ICodeParser { if (!this.isVsCodeAutoComplete(nextLineTxt)) { logicalLine += "\n"; - if (finalSlice > 0) { + if (endOfDeclaration === true) { logicalLine += nextLineTxt.slice(0, finalSlice); } else { logicalLine += nextLineTxt; @@ -436,7 +439,7 @@ export default class CppParser implements ICodeParser { logicalLine.replace(/\*\//g, ""); } - if (finalSlice > 0) { + if (endOfDeclaration) { return logicalLine.replace(/^\s+|\s+$/g, ""); } } diff --git a/src/test/CppTests/Attributes.test.ts b/src/test/CppTests/Attributes.test.ts index bfeaef1..a6641e1 100644 --- a/src/test/CppTests/Attributes.test.ts +++ b/src/test/CppTests/Attributes.test.ts @@ -59,4 +59,9 @@ suite("C++ - Attributes Tests", () => { const result = testSetup.SetLine("constexpr int foo(int a, double& b) throw(std::except);").GetResult(); assert.equal("/**\n * @brief \n * \n * @param a \n * @param b \n * @return constexpr int \n */", result); }); + + test("Newline in function", () => { + const result = testSetup.SetLines(["static void ResetActionState( BOOL sendNAK )", "{"]).GetResult(); + assert.equal("/**\n * @brief \n * \n * @param sendNAK \n */", result); + }); }); -- cgit v1.2.3