dotnet/roslyn

Compiler missing namespace symbols seem to not implment IsGlobalNamespace properly.

Open

#44,767 opened on Jun 1, 2020

View on GitHub
 (0 comments) (0 reactions) (0 assignees)C# (4,257 forks)batch import
Area-CompilersBughelp wanted

Repository metrics

Stars
 (20,414 stars)
PR merge metrics
 (Avg merge 6d 17h) (256 merged PRs in 30d)

Description

Found in https://github.com/dotnet/roslyn/pull/44713

Say you have a project with no references (not even corlib or anything like that):

class C  { public int i; }

the i field will have an ErrorTypeSymbol for it's return type with name "Int32" contained in a missing namespace "" . "System". i.e. it is parented by two namespaces (expected), the empty named one, and the System named one. The empty named namespace is not marked as a global namespace though. i.e. IsGlobalNamespace returns false. Indeed, the empty named namespace is itself then parented by an actual empty-named-global-namespace.

This feel very unintentional and odd. IDE worked around this simply by checking if we have an error type and special casing our processing of this namespace chain. So this is nbd, but potentially something that someone coudl fix (including community) in the future if they were so inclined.

Contributor guide