summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Schlosser <christoph@linux.com>2018-06-25 13:51:48 +0200
committerChristoph Schlosser <christoph@linux.com>2018-06-25 13:51:48 +0200
commitfc8b744aac786e416e6663490f2efbf40b016964 (patch)
tree76b2a3db239dfb156cb9996ca50566b3a8928c77
parenta87c10f87bb8e3a93fb95a0b066e1df148b08e5a (diff)
downloaddoxdocgen-fc8b744aac786e416e6663490f2efbf40b016964.tar.gz
Parse member pointers correctly
-rw-r--r--src/Lang/Cpp/CppParser.ts11
-rw-r--r--src/Lang/Cpp/CppToken.ts1
-rw-r--r--src/test/CppTests/MemberPointers.test.ts23
3 files changed, 35 insertions, 0 deletions
diff --git a/src/Lang/Cpp/CppParser.ts b/src/Lang/Cpp/CppParser.ts
index 0b34347..746c11c 100644
--- a/src/Lang/Cpp/CppParser.ts
+++ b/src/Lang/Cpp/CppParser.ts
@@ -695,6 +695,17 @@ export default class CppParser implements ICodeParser {
return this.GetArgumentFromFuncPtr(copy);
}
+ // Handle member pointers
+ for (let token: number = 0; token < copy.nodes.length - 1; token++) {
+ const firstToken: CppToken = copy.nodes[token] as CppToken;
+ const secondToken: CppToken = copy.nodes[token + 1] as CppToken;
+
+ if (firstToken.type === CppTokenType.Symbol && secondToken.type === CppTokenType.Pointer &&
+ firstToken.value.endsWith("::")) {
+ firstToken.type = CppTokenType.MemberPointer;
+ }
+ }
+
return this.GetDefaultArgument(copy);
}
diff --git a/src/Lang/Cpp/CppToken.ts b/src/Lang/Cpp/CppToken.ts
index f229e8f..61b78b7 100644
--- a/src/Lang/Cpp/CppToken.ts
+++ b/src/Lang/Cpp/CppToken.ts
@@ -13,6 +13,7 @@ export enum CppTokenType {
CommentLine,
Ellipsis,
Attribute,
+ MemberPointer,
}
export class CppToken {
diff --git a/src/test/CppTests/MemberPointers.test.ts b/src/test/CppTests/MemberPointers.test.ts
new file mode 100644
index 0000000..38410c4
--- /dev/null
+++ b/src/test/CppTests/MemberPointers.test.ts
@@ -0,0 +1,23 @@
+//
+// Note: This example test is leveraging the Mocha test framework.
+// Please refer to their documentation on https://mochajs.org/ for help.
+//
+
+// The module 'assert' provides assertion methods from node
+import * as assert from "assert";
+
+// You can import and use all API from the 'vscode' module
+// as well as import your extension to test it
+import * as vscode from "vscode";
+import TestSetup from "./TestSetup";
+
+// Defines a Mocha test suite to group tests of similar kind together
+suite("C++ - Member pointers tests", () => {
+ const testSetup: TestSetup = new TestSetup("void foo();");
+
+ // tests
+ test("Simple", () => {
+ const result = testSetup.SetLine("void test(int foo::* memberPointer);").GetResult();
+ assert.equal("/**\n * @brief \n * \n * @param memberPointer \n */", result);
+ });
+});