-
Notifications
You must be signed in to change notification settings - Fork 73
[markdown] Simplify deindentation logic for fenced code block lines #2187
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[markdown] Simplify deindentation logic for fenced code block lines #2187
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request simplifies and optimizes the de-indentation logic for fenced code block lines by replacing a regular expression-based implementation with a more direct, character-by-character check. This change improves performance and also more strictly adheres to the CommonMark specification by only considering spaces for indentation removal, not all whitespace characters. The new implementation is correct and a clear improvement. I have one minor suggestion to improve readability.
pkgs/markdown/lib/src/block_syntaxes/fenced_code_block_syntax.dart
Outdated
Show resolved
Hide resolved
Package publishing
Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation. |
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
PR HealthBreaking changes ✔️
This check can be disabled by tagging the PR with Changelog Entry ✔️
Changes to files need to be accounted for in their respective changelogs. This check can be disabled by tagging the PR with Coverage ✔️
This check for test coverage is informational (issues shown here will not fail the PR). This check can be disabled by tagging the PR with API leaks ✔️The following packages contain symbols visible in the public API, but not exported by the library. Export these symbols or remove them from your publicly visible API.
This check can be disabled by tagging the PR with License Headers ✔️
All source files should start with a license header. Unrelated files missing license headers
This check can be disabled by tagging the PR with |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lovely!
…it_inspection_protocol Revisions updated by `dart tools/rev_sdk_deps.dart`. ai (https://github.com/dart-lang/ai/compare/901e2ce..ec5d6aa): ec5d6aa 2025-10-01 dependabot[bot] Bump the github-actions group with 2 updates (dart-lang/ai#288) http (https://github.com/dart-lang/http/compare/e0dadd1..2c53fa3): 2c53fa3 2025-10-01 dependabot[bot] Bump the github-actions group with 3 updates (dart-lang/http#1828) 1b5103f 2025-10-01 Alex Li [cronet_http] Upgrade `cronet-embedded` dependency version to support 16 KB page sizes (dart-lang/http#1824) f701e93 2025-09-29 Brian Quinlan Remove obsolete TODO comment (dart-lang/http#1816) i18n (https://github.com/dart-lang/i18n/compare/09627d2..34d1832): 34d1832b 2025-10-01 Moritz Fix casemapping on web (dart-lang/i18n#1013) 914b0178 2025-10-01 dependabot[bot] Bump actions/labeler from 5.0.0 to 6.0.1 in the github-actions group (dart-lang/i18n#1014) f171926e 2025-09-19 Moritz Upgrade SDK in package:intl_translation (dart-lang/i18n#983) shelf (https://github.com/dart-lang/shelf/compare/de91a5b..f30d650): f30d650 2025-10-01 dependabot[bot] Bump the github-actions group with 3 updates (dart-lang/shelf#483) test (https://github.com/dart-lang/test/compare/b99d556..a16f149): a16f1497 2025-10-01 dependabot[bot] Bump the github-actions group with 5 updates (dart-lang/test#2547) tools (https://github.com/dart-lang/tools/compare/2ef298e..19f91a0): 19f91a03 2025-10-01 Morgan :) Run file watcher symlink tests. (dart-lang/tools#2189) 7929379b 2025-10-01 Morgan :) Add test coverage for file watcher and symlinks. (dart-lang/tools#2178) d0e3edd1 2025-09-30 Morgan :) Fix file watcher startup race on MacOS (dart-lang/tools#2176) 36cefcee 2025-10-01 dependabot[bot] Bump the github-actions group with 5 updates (dart-lang/tools#2188) 08db1688 2025-10-01 Aleksey Garbarev Fixing structure issue of nested lists indented by tabs (`#2172`) (dart-lang/tools#2173) 16276f53 2025-09-30 Parker Lougheed [markdown] Simplify deindentation logic for fenced code block lines (dart-lang/tools#2187) vector_math (https://github.com/google/vector_math.dart/compare/3939545..a7b7e9c): a7b7e9c 2025-10-01 dependabot[bot] Bump the github-actions group with 2 updates (google/vector_math.dart#352) web (https://github.com/dart-lang/web/compare/0baaea4..816abcc): 816abcc 2025-10-01 dependabot[bot] Bump the github-actions group with 2 updates (dart-lang/web#473) webkit_inspection_protocol (https://github.com/google/webkit_inspection_protocol.dart/compare/effa752..0f76858): 0f76858 2025-10-01 dependabot[bot] Bump the github-actions group across 1 directory with 3 updates (google/webkit_inspection_protocol.dart#135) Change-Id: Id2cf6c1142aece53d531ca46122bb36a0fa2a34b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/452902 Commit-Queue: Devon Carew <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
Fenced code blocks track leading spaces before the opening code fence to remove indentation from each line in the code block.
The pre-existing function for doing this removed the correct amount of indentation but then recreated the same string. We could simplify the function by justing removing the second
substring
. However, since this is called for every line of each code block and it's only necessary to handle spaces, I instead rewrote the function to remove the regular expression usage.