Support 'protected abstract'
- Dominant language
- F#
- Stars
- 4.3k
- Forks
- 876
- Avg merge
- 4d 11h
- Merged PRs (30d)
- 131
Description
**Repro steps**
1. Create new fsharp project
2. Add "MarkdigExtensions.SyntaxHighlighting" package
3. Add the following code
```f#
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](https://github.com/dotnet/fsharp/files/7375873/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:
```f#
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:
```c#
protected abstract void Write(TRenderer renderer, TObject obj);
// TRenderer resolves into HtmlRenderer
// TObject resolves into CodeBlock
```
Contributor guide
Assessment
This issue has not been assessed yet.