| 480 | } |
| 481 | |
| 482 | ArgumentDoc FunctionDoc::ParseArgumentToken(const std::string& argument_token) |
| 483 | { |
| 484 | ArgumentDoc argument_doc; |
| 485 | |
| 486 | // Argument with default value |
| 487 | std::regex rgx_with_default("([A-Za-z_][A-Za-z\\d_]*): " |
| 488 | "([A-Za-z_][A-Za-z\\d_:\\.\\[\\]\\(\\) ,]*) = (.*)"); |
| 489 | std::smatch matches; |
| 490 | if (std::regex_search(argument_token, matches, rgx_with_default)) |
| 491 | { |
| 492 | argument_doc.name_ = matches[1].str(); |
| 493 | argument_doc.type_ = NamespaceFix(matches[2].str()); |
| 494 | argument_doc.default_ = matches[3].str(); |
| 495 | |
| 496 | // Handle long default value. Long default has multiple lines and thus |
| 497 | // they are not displayed in signature, but in docstrings. |
| 498 | size_t default_start_pos = matches.position(3); |
| 499 | if (default_start_pos + argument_doc.default_.size() < argument_token.size()) |
| 500 | { |
| 501 | argument_doc.long_default_ = |
| 502 | argument_token.substr(default_start_pos, argument_token.size() - default_start_pos); |
| 503 | argument_doc.default_ = "(with default value)"; |
| 504 | } |
| 505 | } |
| 506 | |
| 507 | else |
| 508 | { |
| 509 | // Argument without default value |
| 510 | std::regex rgx_without_default("([A-Za-z_][A-Za-z\\d_]*): " |
| 511 | "([A-Za-z_][A-Za-z\\d_:\\.\\[\\]\\(\\) ,]*)"); |
| 512 | if (std::regex_search(argument_token, matches, rgx_without_default)) |
| 513 | { |
| 514 | argument_doc.name_ = matches[1].str(); |
| 515 | argument_doc.type_ = NamespaceFix(matches[2].str()); |
| 516 | } |
| 517 | } |
| 518 | |
| 519 | return argument_doc; |
| 520 | } |
| 521 | |
| 522 | std::vector<std::string> FunctionDoc::GetArgumentTokens(const std::string& pybind_doc) |
| 523 | { |
nothing calls this directly
no outgoing calls
no test coverage detected