Skip to content

Support 'protected abstract' #12281

Open
Open
@kostya9

Description

@kostya9

Repro steps

  1. Create new fsharp project
  2. Add "MarkdigExtensions.SyntaxHighlighting" package
  3. Add the following code
open Markdig.Renderers
open Markdig.Renderers.Html
open Markdig.Syntax
open MarkdigExtensions.SyntaxHighlighting


type SyntaxHighlightingRendererWrapper() =
    inherit CodeBlockRenderer() with
        let highlightingRenderer = HighlightedCodeBlockRenderer()

        override _.Write(renderer: HtmlRenderer, codeBlock: CodeBlock): unit =
            highlightingRenderer.Write(renderer, codeBlock)

ZIP archive of the reproduction:
Repro_fsharp_accessibility.zip

Expected behavior

No compilation errors

Actual behavior

Error

  Program.fs(12, 13): [FS0629] Method 'Write' is not accessible from this code location

Known workarounds

Extract Write method into a function:

open Markdig.Renderers
open Markdig.Renderers.Html
open Markdig.Syntax
open MarkdigExtensions.SyntaxHighlighting


let render (highlightingRenderer: HighlightedCodeBlockRenderer) (renderer: HtmlRenderer) (codeBlock: CodeBlock) =
    highlightingRenderer.Write(renderer, codeBlock)

type SyntaxHighlightingRendererWrapper() =
    inherit CodeBlockRenderer() with
        let highlightingRenderer = HighlightedCodeBlockRenderer()

        override _.Write(renderer: HtmlRenderer, codeBlock: CodeBlock): unit =
            render highlightingRenderer renderer codeBlock

Related information

  • Win11
  • .NET 6 (SDK version=6.0.100-rc.2.21505.57)
  • Building via dotnet CLI (dotnet build)

I can only guess that this has something to do with overload resolution.
Type HighlightedCodeBlockRenderer inherits from MarkdownObjectRenderer that has a similar protected method:

protected abstract void Write(TRenderer renderer, TObject obj);
// TRenderer resolves into HtmlRenderer
// TObject resolves into CodeBlock

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-Compiler-ImportAndInteropimport of .NET DLLs and interopBugImpact-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