Details
- Reviewers
gribozavr2
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
- [SyntaxTree] Provide iterator for List that iterates through ElementAndDelimiters even for not well-defined lists.
This is quite low priority, compared to the other branches of work, but it was almost ready work, so I decided to polish it and send it to review now.
| clang/include/clang/Tooling/Syntax/Tree.h | ||
|---|---|---|
| 242–277 | Should we hide some of this? Most of the member functions are a couple of lines, so I decided not to. What is your opinion? | |
| 279–280 | I chose to leave it as getBegin and getEnd instead of getElementsAndDelimitersBegin. I did this because the return type of those methods already tells us that we're getting an ElementAndDelimiterIterator. What do you think? | |
| 441–448 | These are all private static methods, should we hide them from the header? | |
| clang/include/clang/Tooling/Syntax/Tree.h | ||
|---|---|---|
| 212 | Please also define operator!= even if it is not used yet. | |
| 229 | "how something looks" or "what something looks like" | |
| 242–277 | I think it is fine as is. | |
| 273 | Please also define operator!=. | |
| 287 | I'd imagine derived classes would have iterators that produce strongly-typed elements, right? If so, these methods getBegin()/getEnd()/getRange() should have the word "Node" in them. | |
| 443 | People can use "find usages" to find what uses these methods. Such comments often go out of date. | |
| clang/lib/Tooling/Syntax/Tree.cpp | ||
| 331 | I have a hard time understand what a b x and the comma stand for in these comments. | |
| 340–345 | ||
| 348 | Ditto? | |
- Make ElementAndDelimiterIterator templated.
| clang/include/clang/Tooling/Syntax/Tree.h | ||
|---|---|---|
| 273 | this is defined by the iterato_facade_base, take a look at the comments in this class template | |
| clang/lib/Tooling/Syntax/Tree.cpp | ||
| 348 | Here we could do std::transform(getBegin(), getEnd(), std::back_inserter(result), [](ElementAndDelimiter ED){return ED.element;}). Is that more idiomatic? | |
| clang/include/clang/Tooling/Syntax/Tree.h | ||
|---|---|---|
| 242–243 | Since we're gonna provide strongly-typed iterators, I make the Iterator a class template. I keep the base functions as they were, getElementAndDelimiterAfter..., but I cast their result using castToElementType. Another option would be to make the base functions also templated and not perform any casting. We'll use castToElementType to provide the strongly-typed iterators as well. | |
- [SyntaxTree] ElementAndDelimiterIterator is polymorphic and supports BeforeBegin iterator
| clang/include/clang/Tooling/Syntax/Tree.h | ||
|---|---|---|
| 242–243 | Ignore comment above | |
| 253 | Since NodeRole is forward declared, we cannot access NodeRole::ListElement within the header, this is my work-around. Another possibility would be to not forward declare and put NodeRole definition here. I think this is a bad choice because most roles are linked to syntax. I declare isElement as a static private member function of List from lack of better place, I accept suggestions. | |
| 391 | I have a hard time finding a name that is expressive enough and concise enough. The current one seems to imply that we're getting a node... Alternatives:
| |
Please also define operator!= even if it is not used yet.