better-cpp-syntax icon indicating copy to clipboard operation
better-cpp-syntax copied to clipboard

Incorrect tokenization of multiline comments with whitespace

Open alexr00 opened this issue 5 years ago • 3 comments

Checklist

  • [ ] This problem exists even with the setting "C_Cpp.enhancedColorization": "Disabled"
  • [ ] This bug exists for C
  • [x] This bug exists for C++
  • [ ] This bug exists for Objective-C
  • [ ] This bug exists for Objective-C++

The code with a problem is:

#define TCP_NOTSENT_LOWAT	 25 /* Limit number of unsent bytes in

				       write queue.  */

#define TCP_CC_INFO		 26 /* Get Congestion Control

				       (optional) info.  */

#define TCP_SAVE_SYN		 27 /* Record SYN headers for new

				       connections.  */

#define TCP_SAVED_SYN		 28 /* Get SYN headers recorded for

				       connection.  */

It looks like:

** screenshot + theme name preferable ** image

It should look like:

Comments should span multiple lines.

Originally from @duzeev in https://github.com/microsoft/vscode/issues/107565

alexr00 avatar Sep 29 '20 11:09 alexr00

I think this is unfixable without the tree sitter.

The #define uses the while pattern to ignore ranges (ranges like a { with no }), but in doing so, it ignores the range of a comment too.

jeff-hykin avatar Nov 04 '20 00:11 jeff-hykin

@jeff-hykin Apologies for not being involved for the last 6 months.

The reason this breaks is that :single_line_macro matches as the line does not end in \

It should be possible to have :single_line_macro exclude lines that have /* that is not later succeeded by */. This would cause the macro matching to fall back to multi-line macro matching where the comment would be properly matched.

matter123 avatar Nov 05 '20 19:11 matter123

You're good @matter123 , I've been gone for awhile, and I probably will be intermittent at best. I've gone back to just using master since it's too much effort with the branches when I have such short time.

Thanks for the comment, I forgot there was a single line macro. Still sounds like a hack to me so I'll let you implement that one 😆. If there was a string with /* inside of it, seems like that would be a problem.

jeff-hykin avatar Nov 06 '20 13:11 jeff-hykin