Seriously advanced syntax code, that :-)! That seems to work very well. Consequential errors show up as well, braces and semicolons showing up as red, so fixing the first erroneous semicolon clears a lot of red later. This helps in finding the culprit, so that isn't a problem. The only thing now is that I'm getting the ; in for loops showing up as red, when the rest is cleared by fixing the syntax.
for(k=0;k<mk;k++) { ... } Any ideas about that? Thank you, Hugh On Tue, 22 Feb 2011, Ben Schmidt wrote: > On 22/02/11 1:23 AM, Hugh Sasse wrote: > > I've been assisting a colleague with their C code, and he has > > learned to add semicolons at the end of statements too well. His > > current favourite mistake is to write > > if (expression == value); > > { > > do_something(); > > }; > > O nooo!!! > > > I frequently miss the trailing semicolon on the first line. So I > > was wondering if it would make sense to modify the C syntax file to > > highlight > > if (expr); > > such that the semicolon shows up as an error. Clearly it is a legal > > null statement, and so is syntactically correct. But if one only > > wanted the expr for its side effects, one would not need to put it > > in an if. To do this because one is only using the else part is > > poor communication with other programmers. > > I agree nobody should ever do this, even though it's valid. > > > Is there a good reason not to change the syntax file? Otherwise, > > can anyone suggest a patch: my skills in this area are suboptimal, > > as I don't change syntax files very often. > > It's a relatively complicated change, because the syntax file currently > doesn't recognise the if as a construct; it only recognises if as a > keyword and treats the parentheses just as any other set of parentheses. > > This code seems to work for me to get it to recognise the construct and > call the empty-statement semi-colon an error; it also highlights the > parentheses of the if as a keyword, as a side-effect. You can put it in > ~/.vim/after/syntax/c.vim (or on Windows, > $HOME/vimfiles/after/syntax/c.vim) and it should work. > > syn clear cConditional > syn keyword cConditional else switch > syn region cIf matchgroup=cConditional start=+if\_s*(+ > end=+)\_s*\ze[^;)]+ contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell > skipwhite skipnl skipempty nextgroup=cSemiError > syn match cSemiError contained ";" > hi link cSemiError cParenError > > Not sure that it's a good idea for the distributed Vim C syntax file, > though. It may slow down the matching, possibly, and there may be a > bunch of corner cases that don't work so well, and other usability > glitches while you're writing code (before the syntax is valid). I guess > it depends if others would find this useful, and whether there are > noticable hassles with it or not. Maybe try it out and get back to us if > you think it would be worth including (Bram is the maintainer of the C > syntax, so he's the person you'd need to convince!). > > Ben. > > > > -- > You received this message from the "vim_use" maillist. > Do not top-post! Type your reply below the text you are replying to. > For more information, visit http://www.vim.org/maillist.php > -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php