I'm evaluating C::B as replacement of Dev-cpp and found some errors:
1) First of all class templates seemes parsed totally incorrectly
I got a lof of dublicate, bogus and out-of-place "symbols" (in selfnamed tab). I even got class named ">" and const named ",".
2) Also there can be something wrong with comment skipping in folding - C-style comments skipped properly, but C++-style ones not - it get commented } as end-of-group (noticed on commented code with } at line end).
3) Moreover if I choose "Jump to declaration" from context menu - I get to line next to expected.
4) Unnamed enum causes all defined in it constants (also last ",") appear in global scope independ of there is was really defined (see code below)
namespace ... {
class ... {
enum {
// full skip, even [{] and [}] skipped
// forces m_state.m_skip = true
// used to skip up to end group things not skipped otherwise
pdFullSkip,
// current depth of table - possible values are 1 and 2; 3 and more are ignored
pdDepth,
// current destination - see Dest enum
pdDest,
// either finish reached
// forces odDest = dNone
// forces m_state.m_skip = true
// used to check item correctness
pdFinish,
};
};
}
5) Every reload of tree indirectly (e.g. through saving file) leads to append of updated items to end instead of replace
I think there are more but those I found in couples of minutes and stop research.
PS. If not clear - most of above is about "Symbols" tab at left side of main window
PSS. Sorry for my English, it's not my primary language, but I tried :)
PSSS. Win/XP-SP2 C::B/1.0-b6
Well, I see, that they are not handled in special [read any] way, but misparsing is there :)
Member specializations do not appear in list at all, example:
template<typename Typename>
class Class { void member(); /*...*/ };
//...
template<>
void Class<void>::member() { /*...*/ }
Class specializations (at least one of them) appear as class named ">", example:
template<typename Typename>
class Class : public Base { /*...*/ };
//...
template<>
class Class<void> : public Base { /*...*/ };
Template members (defined outside of class) appear twice - once in class itself, and second sibling to it, example:
template<typename Typename>
Class { void member1(); std::string<Typename> member2(); /*...*/ };
//...
template<typename Typename>
void
Class<Typename>::member1() { /*...*/ }
//...
template<typename Typename>
std::string<Typename>
Class<Typename>::member2();
This example leads to:
- Class
| | - member1() : void
| | - member2()
| - member1() : ::
| - member2() : ::
Also, as I mentioned earlier when I select "Jump to declaration" in context menu, I jump to line next to expected
So next week, I believe, we might be ready for the next release
Great news :) Thanks for fixing these bugs.
EDITED:
Found bug in folding. I don't know if this is bug of C::B or scintilla as I don't know how folding internally work, but code like
void func() {
//if (false) {
// // do nothing
//}
otherFunc();
}
folds incorrectly to
void func() {
otherFunc();
}
And if I put any char between // and } all become good.
I found that bug described above may be "feature" :) to force somewhere a fold. If it's so I suppose to support vim like folding, e.g.
/* {{{ */
// something
/* }}} */
and
and have possibility to selectively turn on/off different type of folds (comment, preprocessor, general (e.g. scope), vim) per project or even per file.
Also it IMHO will be good if after folding the closing part will be visible too, e.g. previous example would become:
and not
which sometimes not clear enough
Of course, all above is applicable only if is possible at all.