Skip to content

"Implement Interface" defines multiple methods for nested interfaces #5813

Open
@EBrown8534

Description

@EBrown8534

This one is a bit weird, and I don't know if this is the right place for it.

If you define two interfaces that implement a common, third interface, the "quick action" (CTRL + .) will re-implement the common interface when it should not, even if the third interface is explicitly implemented. (If the third interface is not explicitly implemented, the quick-action does nothing.)

Repro steps

Consider the following code:

type IFoo =
    abstract member Foo : unit -> unit

type IBar =
    inherit IFoo
    abstract member Bar : unit -> unit

type IBaz =
    inherit IFoo
    abstract member Baz : unit -> unit
    abstract member Baz2 : unit -> unit

If you define a type, Foo as the following:

type Foo () =
    interface IFoo with
        member this.Foo () = ()
    interface IBar with
        member this.Bar() = raise (System.NotImplementedException())
    interface IBaz with
        member this.Baz() = raise (System.NotImplementedException())

The attempting to use the quick-action to implement IBaz completely will result in:

type Foo () =
    interface IFoo with
        member this.Foo () = ()
    interface IBar with
        member this.Bar() = raise (System.NotImplementedException())
    interface IBaz with
        member this.Baz2() = raise (System.NotImplementedException())
        member this.Foo() = raise (System.NotImplementedException())
        member this.Baz() = raise (System.NotImplementedException())

This is obviously not the correct action for a nested interface.

Expected behavior

The interface function that has already been implemented for a higher-level interface should not be reimplemented.

Actual behavior

The member is reimplemented, and FS0855: No abstract or interface member was found that corresponds to this override is thrown. (Thus, the resulting code cannot compile without modification.)

Known workarounds

Delete the extraneous member(s).

Related information

Provide any related information

  • Operating system: Microsoft Windows 10 Pro for Workstations
  • Branch: VS 15.7.5 Public Release
  • .NET Runtime, CoreCLR or Mono Version: .NET 4.7.2
  • Editing Tools (e.g. Visual Studio Version): Visual Studio 15.7.5
  • Links to F# RFCs or entries on https://github.com/fsharp/fslang-suggestions: Not Applicable
  • Links to performance testing scripts: Not Applicable
  • Indications of severity: Minor / Convenience

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-LangService-CodeFixesCode fixes associated with diagnosticsBugImpact-Low(Internal MS Team use only) Describes an issue with limited impact on existing code.

    Type

    Projects

    Status

    New

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions