Add code block type to MdCodeBlock.

Adds a code block type to `MdCodeBlock` which will allow us to differentiate between fenced code blocks and indented code blocks with the `missing_code_block_language_in_doc_comment` lint (since only fenced code blocks care about a missing info/language string).

Updated tests and added it to the AST printer as well.

Change-Id: Ibffc4edc7708fdc0394b24db8da7c282ffe92eba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/358326
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
This commit is contained in:
Kallen Tu 2024-03-26 06:57:47 +00:00 committed by Commit Queue
parent 34b7df107f
commit 93d2d44b26
5 changed files with 54 additions and 3 deletions

View file

@ -24,6 +24,21 @@ final class BlockDocDirective implements DocDirective {
DocDirectiveType get type => openingTag.type;
}
/// The type of Markdown code block in a documentation comment.
@experimental
enum CodeBlockType {
/// Fenced code blocks begin with a code fence, preceded by up to three spaces
/// of indentation.
///
/// A code fence is a sequence of at least three consecutive backtick
/// characters (`) or tildes (~).
fenced,
/// Indented code blocks have every line of code preceded by four or more
/// spaces of indentation.
indented,
}
/// An instance of a [DocDirectiveType] in the text of a doc comment, either
/// as a [SimpleDocDirective], represented by a single [DocDirectiveTag], or a
/// [BlockDocDirective], represented by an opening [DocDirectiveTag] and a
@ -441,9 +456,13 @@ final class MdCodeBlock {
/// fence delimiter lines.
final List<MdCodeBlockLine> lines;
/// The type of Markdown code block that is being represented.
final CodeBlockType type;
MdCodeBlock({
required this.infoString,
required List<MdCodeBlockLine> lines,
required this.type,
}) : lines = List.of(lines, growable: false);
}

View file

@ -548,7 +548,11 @@ final class DocCommentBuilder {
}
_codeBlocks.add(
MdCodeBlock(infoString: infoString, lines: fencedCodeBlockLines),
MdCodeBlock(
infoString: infoString,
lines: fencedCodeBlockLines,
type: CodeBlockType.fenced,
),
);
return true;
}
@ -572,7 +576,11 @@ final class DocCommentBuilder {
} else {
// End the code block.
_codeBlocks.add(
MdCodeBlock(infoString: null, lines: codeBlockLines),
MdCodeBlock(
infoString: null,
lines: codeBlockLines,
type: CodeBlockType.indented,
),
);
return lineInfo;
}
@ -582,7 +590,11 @@ final class DocCommentBuilder {
// The indented code block ends the comment.
_codeBlocks.add(
MdCodeBlock(infoString: null, lines: codeBlockLines),
MdCodeBlock(
infoString: null,
lines: codeBlockLines,
type: CodeBlockType.indented,
),
);
return lineInfo;
}

View file

@ -661,6 +661,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: dart
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 3
@ -673,6 +674,7 @@ Comment
length: 4
MdCodeBlock
infoString: dart
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 58
@ -757,6 +759,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 15
@ -769,6 +772,7 @@ Comment
length: 3
MdCodeBlock
infoString: dart
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 53
@ -801,6 +805,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 3
@ -830,6 +835,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 3
@ -866,6 +872,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: dart
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 3
@ -904,6 +911,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 3
@ -942,6 +950,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 12
@ -974,6 +983,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 12
@ -1009,6 +1019,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 24
@ -1043,6 +1054,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 25
@ -1084,6 +1096,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 12
@ -1096,6 +1109,7 @@ Comment
length: 4
MdCodeBlock
infoString: dart
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 54
@ -1152,6 +1166,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.indented
lines
MdCodeBlockLine
offset: 17
@ -1198,6 +1213,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.indented
lines
MdCodeBlockLine
offset: 3
@ -1232,6 +1248,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.indented
lines
MdCodeBlockLine
offset: 10
@ -1262,6 +1279,7 @@ Comment
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 13

View file

@ -234,6 +234,7 @@ ClassDeclaration
codeBlocks
MdCodeBlock
infoString: <empty>
type: CodeBlockType.fenced
lines
MdCodeBlockLine
offset: 178

View file

@ -1785,6 +1785,7 @@ Expected parent: (${parent.runtimeType}) $parent
_sink.withIndent(() {
var infoString = codeBlock.infoString;
_sink.writelnWithIndent('infoString: ${infoString ?? '<empty>'}');
_sink.writelnWithIndent('type: ${codeBlock.type}');
assert(codeBlock.lines.isNotEmpty);
_sink.writelnWithIndent('lines');
_sink.withIndent(() {