csharp-tmLanguage icon indicating copy to clipboard operation
csharp-tmLanguage copied to clipboard

C# syntax highlighting is broken by multiline types

Open alexr00 opened this issue 4 years ago • 4 comments

Originally from @svenskmand in https://github.com/microsoft/vscode/issues/96341

  • VSCode Version: Version: 1.44.2 (system setup) Commit: ff915844119ce9485abfe8aa9076ec76b5300ddd Date: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.18363
  • OS Version: Windows 10

Steps to Reproduce:

  1. Open a new C# file and input the following code
namespace Foo {
	public interface IBar<T> {
		IList<T> Baz(IList<IList<IList<IList<IList<IList<
		IList<IList<T>>>>>>>> foobar);		
	}	
}
  1. The type of the foobar variable and the rest of the method has a white text color and no syntax highlighting.

This is how the syntax highlighting looks before the line break: Without line break

This is how the syntax highlighting looks with the line break: With line break

Does this issue occur when all extensions are disabled?: Yes

alexr00 avatar Apr 28 '20 09:04 alexr00

Any update on this? :)

svenskmand avatar May 13 '20 13:05 svenskmand

Not sure if this is related but other valid code is broken in multiline statements as well for example

namespace Foo
{
    public class Bar
    {
        public string Name {get; set;}

        public string Test(Bar[] myArray)
        {
            string result = myArray
                                .Where(a => a.Name.Length > 2)
                                .FirstOrDefault()?
                                .Name ?? "Name";

            return result;
        }
    }
}

I'm noticing that even the embedded text here is broken.

I'm using dotnetcore3.1 and C# 8

npapapietro avatar Sep 27 '20 22:09 npapapietro

Not sure if this is related but other valid code is broken in multiline statements as well for example

namespace Foo
{
    public class Bar
    {
        public string Name {get; set;}

        public string Test(Bar[] myArray)
        {
            string result = myArray
                                .Where(a => a.Name.Length > 2)
                                .FirstOrDefault()?
                                .Name ?? "Name";

            return result;
        }
    }
}

I'm noticing that even the embedded text here is broken.

I'm using dotnetcore3.1 and C# 8

That is because ? is treated as a conditional operator since it cannot look into next line to see the presence of a . and then backtrack. Related issue was #183 and has been fixed.

wise0704 avatar Sep 04 '23 09:09 wise0704

This issue is also the same problem as #63 and other linked issues under it.

wise0704 avatar Sep 04 '23 09:09 wise0704