rsdn / nitra

Nitra is a language workbench
Apache License 2.0
145 stars 11 forks source link

AST: Cannot use extension methods in interpolated strings #29

Open ssrmm opened 7 years ago

ssrmm commented 7 years ago

The compiler gives two error messages with this program:

using Nitra;

namespace Test
{
  ast Test
  {
    Error(context, "Extension methods inside interpolated strings don't work:");
    Error(context, $"$(Foo.UnboxAndIncrement())"); // error : there is no member named `UnboxAndIncrement' in Test.Foo with type ?
                                                   // error : typing fails on ambiguity between overloads: 
    Hint(context, $"This works fine: $(FooExtensions.UnboxAndIncrement(Foo))");

    in Foo : Foo = Foo(2);
  }
}
using System.Console;

namespace Test
{
  public module FooExtensions
  {
    public UnboxAndIncrement(this foo : Foo) : int
    {
      foo.Bar + 1;
    }
  }

  [Record]
  public class Foo
  {
    public Bar : int { get; }
  }

  public module FooTester
  {
    public Test(foo : Foo) : void
    {
      WriteLine($"This also works fine: $(foo.UnboxAndIncrement())");   
    }
  }
}

In addition to the error messages, I also get several hints about System.Convert.ToString() overloads.

Note that this is Nitra specific. As you can see from the WriteLine() in the last line of the second file, it works correctly in Nemerle.