Skip to content

Conversation

parlough
Copy link
Member

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.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a 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.

Copy link

Package publishing

Package Version Status Publish tag (post-merge)
package:bazel_worker 1.1.3 already published at pub.dev
package:benchmark_harness 2.4.0-wip WIP (no publish necessary)
package:boolean_selector 2.1.2 already published at pub.dev
package:browser_launcher 1.1.3 already published at pub.dev
package:cli_config 0.2.1-wip WIP (no publish necessary)
package:cli_util 0.5.0-wip WIP (no publish necessary)
package:clock 1.1.3-wip WIP (no publish necessary)
package:code_builder 4.11.0 already published at pub.dev
package:coverage 1.15.0 already published at pub.dev
package:csslib 1.0.2 already published at pub.dev
package:extension_discovery 2.1.0 already published at pub.dev
package:file 7.0.2-wip WIP (no publish necessary)
package:file_testing 3.1.0-wip WIP (no publish necessary)
package:glob 2.1.3 already published at pub.dev
package:graphs 2.3.3-wip WIP (no publish necessary)
package:html 0.15.6 already published at pub.dev
package:io 1.1.0-wip WIP (no publish necessary)
package:json_rpc_2 4.0.0 already published at pub.dev
package:markdown 7.3.1-wip WIP (no publish necessary)
package:mime 2.0.0 already published at pub.dev
package:oauth2 2.0.4-wip WIP (no publish necessary)
package:package_config 2.3.0-wip WIP (no publish necessary)
package:pool 1.5.2 already published at pub.dev
package:process 5.0.5 already published at pub.dev
package:pub_semver 2.2.0 already published at pub.dev
package:pubspec_parse 1.5.0 already published at pub.dev
package:source_map_stack_trace 2.1.3-wip WIP (no publish necessary)
package:source_maps 0.10.14-wip WIP (no publish necessary)
package:source_span 1.10.1 already published at pub.dev
package:sse 4.1.8 already published at pub.dev
package:stack_trace 1.12.1 already published at pub.dev
package:stream_channel 2.1.4 already published at pub.dev
package:stream_transform 2.1.2-wip WIP (no publish necessary)
package:string_scanner 1.4.1 already published at pub.dev
package:term_glyph 1.2.3-wip WIP (no publish necessary)
package:test_reflective_loader 0.4.0 already published at pub.dev
package:timing 1.0.2 already published at pub.dev
package:unified_analytics 8.0.5 already published at pub.dev
package:watcher 1.1.4 ready to publish watcher-v1.1.4
package:yaml 3.1.3 already published at pub.dev
package:yaml_edit 2.2.2 already published at pub.dev

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>
Copy link

github-actions bot commented Sep 30, 2025

PR Health

Breaking changes ✔️
Package Change Current Version New Version Needed Version Looking good?
markdown None 7.3.0 7.3.1-wip 7.3.0 ✔️

This check can be disabled by tagging the PR with skip-breaking-check.

Changelog Entry ✔️
Package Changed Files

Changes to files need to be accounted for in their respective changelogs.

This check can be disabled by tagging the PR with skip-changelog-check.

Coverage ✔️
File Coverage
pkgs/markdown/lib/src/block_syntaxes/fenced_code_block_syntax.dart 💚 98 % ⬆️ 0 %

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 skip-coverage-check.

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.

Package Leaked API symbol Leaking sources

This check can be disabled by tagging the PR with skip-leaking-check.

License Headers ✔️
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
Files
no missing headers

All source files should start with a license header.

Unrelated files missing license headers
Files
pkgs/bazel_worker/benchmark/benchmark.dart
pkgs/bazel_worker/example/client.dart
pkgs/bazel_worker/example/worker.dart
pkgs/benchmark_harness/integration_test/perf_benchmark_test.dart
pkgs/boolean_selector/example/example.dart
pkgs/clock/lib/clock.dart
pkgs/clock/lib/src/clock.dart
pkgs/clock/lib/src/default.dart
pkgs/clock/lib/src/stopwatch.dart
pkgs/clock/lib/src/utils.dart
pkgs/clock/test/clock_test.dart
pkgs/clock/test/default_test.dart
pkgs/clock/test/stopwatch_test.dart
pkgs/clock/test/utils.dart
pkgs/coverage/lib/src/coverage_options.dart
pkgs/html/example/main.dart
pkgs/html/lib/dom.dart
pkgs/html/lib/dom_parsing.dart
pkgs/html/lib/html_escape.dart
pkgs/html/lib/parser.dart
pkgs/html/lib/src/constants.dart
pkgs/html/lib/src/encoding_parser.dart
pkgs/html/lib/src/html_input_stream.dart
pkgs/html/lib/src/list_proxy.dart
pkgs/html/lib/src/query_selector.dart
pkgs/html/lib/src/token.dart
pkgs/html/lib/src/tokenizer.dart
pkgs/html/lib/src/treebuilder.dart
pkgs/html/lib/src/utils.dart
pkgs/html/test/dom_test.dart
pkgs/html/test/parser_feature_test.dart
pkgs/html/test/parser_test.dart
pkgs/html/test/query_selector_test.dart
pkgs/html/test/selectors/level1_baseline_test.dart
pkgs/html/test/selectors/level1_lib.dart
pkgs/html/test/selectors/selectors.dart
pkgs/html/test/support.dart
pkgs/html/test/tokenizer_test.dart
pkgs/html/test/trie_test.dart
pkgs/html/tool/generate_trie.dart
pkgs/pubspec_parse/test/git_uri_test.dart
pkgs/stack_trace/example/example.dart
pkgs/watcher/test/custom_watcher_factory_test.dart
pkgs/yaml_edit/example/example.dart

This check can be disabled by tagging the PR with skip-license-check.

Copy link
Member

@srawlins srawlins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lovely!

@srawlins srawlins merged commit 16276f5 into dart-lang:main Sep 30, 2025
16 checks passed
@parlough parlough deleted the markdown/fenced-code-block-indent-handling branch September 30, 2025 16:25
copybara-service bot pushed a commit to dart-lang/sdk that referenced this pull request Oct 1, 2025
…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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants