Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Resync Line Endings to the Fleet LF Default by ptr727 · Pull Request #327 · ptr727/LanguageTags · GitHub
Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Resync Line Endings to the Fleet LF Default by ptr727 · Pull Request #327 · ptr727/LanguageTags · GitHub
Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Resync Line Endings to the Fleet LF Default by ptr727 · Pull Request #327 · ptr727/LanguageTags · GitHub
Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Resync Line Endings to the Fleet LF Default by ptr727 · Pull Request #327 · ptr727/LanguageTags · GitHub
Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Resync Line Endings to the Fleet LF Default by ptr727 · Pull Request #327 · ptr727/LanguageTags · GitHub
Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Resync Line Endings to the Fleet LF Default by ptr727 · Pull Request #327 · ptr727/LanguageTags · GitHub
Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Resync Line Endings to the Fleet LF Default by ptr727 · Pull Request #327 · ptr727/LanguageTags · GitHub
Skip to content

Resync Line Endings to the Fleet LF Default - #327

Merged
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf
Aug 29, 2026
Merged

Resync Line Endings to the Fleet LF Default#327
ptr727 merged 1 commit into
developfrom
resync/line-endings-lf

Conversation

@ptr727

@ptr727ptr727 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Converges this repo's line-ending policy with the hub (ptr727/ProjectTemplate). The hub's .editorconfig/.gitattributes default flipped from CRLF to LF after this repo's own CRLF default was added (PR #242, matching what the hub carried at the time). The fleet's line-ending policy keeps release repos on the fleet LF default; no operational-repo override applies here.

  • .editorconfig: [*] end_of_line = lf, CRLF pinned only for *.bat/*.cmd (the one type Windows requires it for). Drops the now-redundant per-type CRLF/LF overrides that existed only to work around the old CRLF default.
  • .gitattributes: * text=auto eol=lf, CRLF pinned for *.bat/*.cmd. LanguageData/ (downloaded source data the parser reads byte-for-byte) gets an explicit -text pin, since the prior repo-wide * -text default no longer covers it.
  • .editorconfig-checker.json: carries the hub's added Exclude block (inert in this pure-.NET repo).
  • Renormalizes every tracked file's line endings to match (content unchanged; verified with git diff --ignore-cr-at-eol against the parent commit).
  • Fixes the four codegen data-file emitters (Iso6392Data, Iso6393Data, Rfc5646Data, UnM49Data), which hardcoded StreamWriter NewLine = "\r\n" to match the old CRLF default. Left as-is, regenerating any *DataGen.cs locally would emit CRLF and fail editorconfig-checker under the new LF default.
  • Updates OPERATIONS.md and WORKFLOW.md, the only two docs that described the old CRLF default.

Verified: dotnet build and dotnet test both clean (310/310 passing), zero content diff outside the five intentionally-edited files.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor

    • Standardized repository text files and generated source files to use LF line endings for consistent cross-platform handling.
    • Preserved CRLF formatting for Windows batch and command scripts.
    • Normalized structured data formatting without changing its content or behavior.
  • Documentation

    • Improved formatting and readability across repository documentation without changing its content.
  • Chores

    • Updated formatting guidance and editor settings while preserving existing project, build, and tool configurations.

CopilotAI lite review requested due to automatic review settings August 29, 2026 19:15
@coderabbitai

coderabbitaiBot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 69abef4c-555e-43dd-92ff-43fc26403405

📥 Commits

Reviewing files that changed from the base of the PR and between 7478f7c and 4ee66b6.

📒 Files selected for processing (5)
  • LanguageData/iso6392.json
  • LanguageData/iso6393.json
  • LanguageData/rfc5646.json
  • LanguageData/unm49.json
  • LanguageTags/LanguageSchema.cs

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change standardizes repository line endings to LF, preserves CRLF for batch scripts, updates formatting rules, and makes generated LanguageTags source files use LF output. Other source, test, tooling, configuration, and documentation files receive formatting-only updates.

Changes

Line ending normalization

Layer / File(s)Summary
Repository formatting policy
.editorconfig, .editorconfig-checker.json, .gitattributes, OPERATIONS.md
The repository now defines LF as the default, retains CRLF for .bat and .cmd, preserves LanguageData/**, and adds related formatting preferences and documentation.
Generated source line endings
LanguageTags/*Data.cs, LanguageTags/LanguageSchema.cs, LanguageData/unm49.json
Generation and serialization now use LF line endings. The language data values and structure remain unchanged.
Library source normalization
LanguageTags/*.cs, LanguageTags/LanguageTags.csproj, LanguageTags/.editorconfig
Library source and project files were reformatted without runtime, API, or configuration changes.
Generator and test normalization
LanguageTagsCreate/*, LanguageTagsTests/*
Generator and test files were reformatted. Generator behavior, test logic, assertions, and project settings remain unchanged.
Repository file normalization
.github/*, .vscode/*, repo-config/*, root metadata, documentation, and tooling files
Repository configuration, workspace files, documentation, metadata, and tool definitions were normalized without substantive content changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk:⚪ Minimal · up to 4ee66

This PR standardizes repository line endings and updates related generators and documentation; no actionable merge-blocking risk remains after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary change: aligning repository line endings with the fleet-wide LF default.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 19.61% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 306 functions across 32 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch resync/line-endings-lf

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align Repository Line Endings with Fleet LF Default

🐞 Bug fix📝 Documentation⚙️ Configuration changes🕐 20-40 Minutes

Grey Divider

AI Description

• Makes LF the repository default while retaining CRLF for Windows batch scripts.
• Preserves downloaded data bytes and aligns generated-source emitters with LF.
• Renormalizes tracked files and documents the fleet-aligned policy.
Diagram

graph TD
P["Fleet LF Policy"] --> E["EditorConfig"] --> T["Tracked Text"] --> K["EOL Checker"]
P --> G["Git Attributes"] --> L[("LanguageData")]
E --> C["Data Emitters"] --> S["Generated Sources"]
G --> T
S --> K
Loading
High-Level Assessment

The selected approach is appropriate: update editor and Git normalization together, explicitly exempt byte-sensitive source data, make code generation deterministic with literal LF, and renormalize in the same change. Platform-dependent Environment.NewLine would recreate cross-platform drift, while staging normalization separately would leave policy and committed bytes temporarily inconsistent.

Files changed (73) +13898 / -13924

Bug fix (4) +1918 / -1918
Iso6392Data.csEmit ISO 639-2 generated code with LF+365/-365

Emit ISO 639-2 generated code with LF

• Changes the ISO 639-2 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6392Data.cs

Iso6393Data.csEmit ISO 639-3 generated code with LF+434/-434

Emit ISO 639-3 generated code with LF

• Changes the ISO 639-3 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Iso6393Data.cs

Rfc5646Data.csEmit RFC 5646 generated code with LF+696/-696

Emit RFC 5646 generated code with LF

• Changes the RFC 5646 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/Rfc5646Data.cs

UnM49Data.csEmit UN M.49 generated code with LF+423/-423

Emit UN M.49 generated code with LF

• Changes the UN M.49 code-generation writer from hardcoded CRLF to LF. The remainder of the file is mechanically renormalized.

LanguageTags/UnM49Data.cs

Documentation (2) +734 / -734
OPERATIONS.mdDocument Git-backed LF normalization+45/-45

Document Git-backed LF normalization

• Updates the configuration-layout guidance to describe text=auto eol=lf as Git's normalization mirror. The document is renormalized to LF.

OPERATIONS.md

WORKFLOW.mdDocument LF workflow line endings+689/-689

Document LF workflow line endings

• Changes workflow guidance from CRLF to LF while preserving the requirement to follow EditorConfig. The remainder of the document is mechanically renormalized.

WORKFLOW.md

Other (67) +11246 / -11272
dotnet-tools.jsonRenormalize .NET tool manifest to LF+26/-26

Renormalize .NET tool manifest to LF

• Converts line endings to LF without changing configured tools or versions.

.config/dotnet-tools.json

.editorconfigSet LF as the repository-wide editor default+215/-237

Set LF as the repository-wide editor default

• Changes the default EOL to LF, keeps CRLF only for .bat and .cmd files, and removes redundant per-type EOL overrides. LanguageData remains exempt from editor normalization.

.editorconfig

.editorconfig-checker.jsonAdd fleet-standard checker exclusions+17/-10

Add fleet-standard checker exclusions

• Adds exclusions for common Python cache and virtual-environment directories while retaining existing disabled checks. The file is also normalized to LF.

.editorconfig-checker.json

.gitattributesNormalize detected text to LF+11/-22

Normalize detected text to LF

• Replaces the repository-wide no-normalization rule with text=auto and LF checkout normalization. Pins .bat and .cmd to CRLF and explicitly preserves LanguageData bytes with -text.

.gitattributes

copilot-instructions.mdRenormalize Copilot guidance to LF+154/-154

Renormalize Copilot guidance to LF

• Converts line endings to LF without changing review instructions.

.github/copilot-instructions.md

dependabot.ymlRenormalize Dependabot configuration to LF+57/-57

Renormalize Dependabot configuration to LF

• Converts line endings to LF without changing update behavior.

.github/dependabot.yml

.gitignoreRenormalize ignore rules to LF+10/-10

Renormalize ignore rules to LF

• Converts line endings to LF without changing ignored paths.

.gitignore

task-runner.jsonRenormalize Husky task configuration to LF+32/-32

Renormalize Husky task configuration to LF

• Converts line endings to LF without changing hook tasks.

.husky/task-runner.json

.markdownlint-cli2.jsoncRenormalize Markdown lint configuration to LF+18/-18

Renormalize Markdown lint configuration to LF

• Converts line endings to LF without changing lint rules.

.markdownlint-cli2.jsonc

launch.jsonRenormalize VS Code launch configuration to LF+19/-19

Renormalize VS Code launch configuration to LF

• Converts line endings to LF without changing launch profiles.

.vscode/launch.json

tasks.jsonRenormalize VS Code tasks to LF+204/-204

Renormalize VS Code tasks to LF

• Converts line endings to LF without changing task definitions.

.vscode/tasks.json

AGENTS.mdRenormalize agent guidance to LF+135/-135

Renormalize agent guidance to LF

• Converts line endings to LF without changing repository guidance.

AGENTS.md

AUDIT.mdRenormalize audit documentation to LF+73/-73

Renormalize audit documentation to LF

• Converts line endings to LF without changing audit procedures.

AUDIT.md

CLAUDE.mdRenormalize Claude guidance to LF+5/-5

Renormalize Claude guidance to LF

• Converts line endings to LF without changing instructions.

CLAUDE.md

CODESTYLE.mdRenormalize code-style documentation to LF+64/-64

Renormalize code-style documentation to LF

• Converts line endings to LF without changing style guidance.

CODESTYLE.md

Directory.Build.propsRenormalize shared build properties to LF+14/-14

Renormalize shared build properties to LF

• Converts line endings to LF without changing build properties.

Directory.Build.props

Directory.Packages.propsRenormalize central package versions to LF+21/-21

Renormalize central package versions to LF

• Converts line endings to LF without changing dependencies or versions.

Directory.Packages.props

GOVERNANCE.mdRenormalize governance documentation to LF+304/-304

Renormalize governance documentation to LF

• Converts line endings to LF without changing governance policy.

GOVERNANCE.md

HISTORY.mdRenormalize release history to LF+29/-29

Renormalize release history to LF

• Converts line endings to LF without changing release history.

HISTORY.md

LICENSERenormalize license text to LF+21/-21

Renormalize license text to LF

• Converts line endings to LF without changing license terms.

LICENSE

LanguageTags.code-workspaceRenormalize workspace configuration to LF+41/-41

Renormalize workspace configuration to LF

• Converts line endings to LF without changing workspace settings.

LanguageTags.code-workspace

LanguageTags.slnxRenormalize solution definition to LF+28/-28

Renormalize solution definition to LF

• Converts line endings to LF without changing solution membership.

LanguageTags.slnx

.editorconfigRenormalize library-specific EditorConfig to LF+10/-10

Renormalize library-specific EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTags/.editorconfig

Extensions.csRenormalize library extensions to LF+128/-128

Renormalize library extensions to LF

• Converts line endings to LF without changing runtime behavior.

LanguageTags/Extensions.cs

GlobalUsings.csRenormalize library global usings to LF+6/-6

Renormalize library global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTags/GlobalUsings.cs

Iso6392DataGen.csRenormalize generated ISO 639-2 data to LF+3430/-3430

Renormalize generated ISO 639-2 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/Iso6392DataGen.cs

LanguageLookup.csRenormalize language lookup source to LF+379/-379

Renormalize language lookup source to LF

• Converts line endings to LF without changing lookup behavior.

LanguageTags/LanguageLookup.cs

LanguageSchema.csRenormalize language schema source to LF+39/-39

Renormalize language schema source to LF

• Converts file line endings to LF; embedded string-generation behavior remains unchanged.

LanguageTags/LanguageSchema.cs

LanguageTag.csRenormalize language-tag model to LF+393/-393

Renormalize language-tag model to LF

• Converts line endings to LF without changing model behavior.

LanguageTags/LanguageTag.cs

LanguageTagBuilder.csRenormalize language-tag builder to LF+139/-139

Renormalize language-tag builder to LF

• Converts line endings to LF without changing builder behavior.

LanguageTags/LanguageTagBuilder.cs

LanguageTagParser.csRenormalize language-tag parser to LF+839/-839

Renormalize language-tag parser to LF

• Converts line endings to LF without changing parsing behavior.

LanguageTags/LanguageTagParser.cs

LanguageTags.csprojRenormalize library project configuration to LF+41/-41

Renormalize library project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTags/LanguageTags.csproj

LogOptions.csRenormalize logging options to LF+84/-84

Renormalize logging options to LF

• Converts line endings to LF without changing logging behavior.

LanguageTags/LogOptions.cs

UnM49DataGen.csRenormalize generated UN M.49 data to LF+569/-569

Renormalize generated UN M.49 data to LF

• Converts generated source line endings to LF without changing generated records.

LanguageTags/UnM49DataGen.cs

.editorconfigRenormalize codegen EditorConfig to LF+7/-7

Renormalize codegen EditorConfig to LF

• Converts line endings to LF without changing project-specific analyzer settings.

LanguageTagsCreate/.editorconfig

CommandLine.csRenormalize codegen command-line handling to LF+118/-118

Renormalize codegen command-line handling to LF

• Converts line endings to LF without changing argument handling.

LanguageTagsCreate/CommandLine.cs

CreateTagData.csRenormalize data-generation orchestration to LF+180/-180

Renormalize data-generation orchestration to LF

• Converts line endings to LF without changing generation behavior.

LanguageTagsCreate/CreateTagData.cs

Extensions.csRenormalize codegen extensions to LF+64/-64

Renormalize codegen extensions to LF

• Converts line endings to LF without changing extension behavior.

LanguageTagsCreate/Extensions.cs

GlobalUsings.csRenormalize codegen global usings to LF+5/-5

Renormalize codegen global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsCreate/GlobalUsings.cs

LanguageTagsCreate.csprojRenormalize codegen project configuration to LF+28/-28

Renormalize codegen project configuration to LF

• Converts line endings to LF without changing project settings.

LanguageTagsCreate/LanguageTagsCreate.csproj

LoggerFactory.csRenormalize codegen logger factory to LF+64/-64

Renormalize codegen logger factory to LF

• Converts line endings to LF without changing logging setup.

LanguageTagsCreate/LoggerFactory.cs

Program.csRenormalize codegen entry point to LF+92/-92

Renormalize codegen entry point to LF

• Converts line endings to LF without changing program behavior.

LanguageTagsCreate/Program.cs

.editorconfigRenormalize test EditorConfig to LF+10/-10

Renormalize test EditorConfig to LF

• Converts line endings to LF without changing test analyzer settings.

LanguageTagsTests/.editorconfig

Fixture.csRenormalize test fixture to LF+23/-23

Renormalize test fixture to LF

• Converts line endings to LF without changing fixture behavior.

LanguageTagsTests/Fixture.cs

GlobalUsings.csRenormalize test global usings to LF+2/-2

Renormalize test global usings to LF

• Converts line endings to LF without changing imported namespaces.

LanguageTagsTests/GlobalUsings.cs

Iso6392Tests.csRenormalize ISO 639-2 tests to LF+163/-163

Renormalize ISO 639-2 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6392Tests.cs

Iso6393Tests.csRenormalize ISO 639-3 tests to LF+163/-163

Renormalize ISO 639-3 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Iso6393Tests.cs

LanguageLookupTests.csRenormalize lookup tests to LF+172/-172

Renormalize lookup tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageLookupTests.cs

LanguageSchemaTests.csRenormalize schema tests to LF+40/-40

Renormalize schema tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageSchemaTests.cs

LanguageTagBuilderTests.csRenormalize builder tests to LF+187/-187

Renormalize builder tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagBuilderTests.cs

LanguageTagParserTests.csRenormalize parser tests to LF+149/-149

Renormalize parser tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagParserTests.cs

LanguageTagTests.csRenormalize language-tag tests to LF+619/-619

Renormalize language-tag tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LanguageTagTests.cs

LanguageTagsTests.csprojRenormalize test project configuration to LF+27/-27

Renormalize test project configuration to LF

• Converts line endings to LF without changing test project settings.

LanguageTagsTests/LanguageTagsTests.csproj

LogExtensionsTests.csRenormalize logging extension tests to LF+59/-59

Renormalize logging extension tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogExtensionsTests.cs

LogOptionsTests.csRenormalize logging option tests to LF+140/-140

Renormalize logging option tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/LogOptionsTests.cs

Rfc5646Tests.csRenormalize RFC 5646 tests to LF+179/-179

Renormalize RFC 5646 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/Rfc5646Tests.cs

UnM49Tests.csRenormalize UN M.49 tests to LF+163/-163

Renormalize UN M.49 tests to LF

• Converts line endings to LF without changing test coverage or assertions.

LanguageTagsTests/UnM49Tests.cs

README.mdRenormalize README to LF+649/-649

Renormalize README to LF

• Converts line endings to LF without changing user-facing content.

README.md

codecov.ymlRenormalize Codecov configuration to LF+27/-27

Renormalize Codecov configuration to LF

• Converts line endings to LF without changing coverage settings.

codecov.yml

cspell.jsonRenormalize spelling configuration to LF+99/-99

Renormalize spelling configuration to LF

• Converts line endings to LF without changing dictionaries or exclusions.

cspell.json

global.jsonRenormalize .NET SDK configuration to LF+5/-5

Renormalize .NET SDK configuration to LF

• Converts line endings to LF without changing SDK or test-runner settings.

global.json

README.mdRenormalize repository-config documentation to LF+71/-71

Renormalize repository-config documentation to LF

• Converts line endings to LF without changing provisioning guidance.

repo-config/README.md

develop.jsonRenormalize develop ruleset baseline to LF+68/-68

Renormalize develop ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/develop.json

main.jsonRenormalize main ruleset baseline to LF+65/-65

Renormalize main ruleset baseline to LF

• Converts line endings to LF without changing branch rules.

repo-config/main.json

settings.jsonRenormalize repository settings baseline to LF+10/-10

Renormalize repository settings baseline to LF

• Converts line endings to LF without changing repository settings.

repo-config/settings.json

secrets.jsonRenormalize secret specification to LF+33/-33

Renormalize secret specification to LF

• Converts line endings to LF without changing required secret names.

spec/secrets.json

version.jsonRenormalize version configuration to LF+10/-10

Renormalize version configuration to LF

• Converts line endings to LF without changing versioning behavior.

version.json

@codecov

codecovBot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.06587% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.06%. Comparing base (0bdb175) to head (4ee66b6).

Files with missing linesPatch %Lines
LanguageTags/LanguageTagParser.cs86.83%31 Missing and 26 partials ⚠️
LanguageTags/LanguageLookup.cs75.41%33 Missing and 11 partials ⚠️
LanguageTags/LogOptions.cs80.95%1 Missing and 3 partials ⚠️
LanguageTags/LanguageTag.cs98.57%0 Missing and 2 partials ⚠️
LanguageTags/LanguageTagBuilder.cs97.91%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## develop #327 +/- ##
========================================
Coverage 87.06% 87.06% ========================================
Files 8 8 Lines 835 835 Branches 139 139 ========================================
Hits 727 727 Misses 65 65 Partials 43 43 
Files with missing linesCoverage Δ
LanguageTags/Extensions.cs100.00% <100.00%> (ø)
LanguageTags/LanguageSchema.cs100.00% <100.00%> (ø)
LanguageTags/Rfc5646Data.cs100.00% <100.00%> (ø)
LanguageTags/LanguageTagBuilder.cs97.91% <97.91%> (ø)
LanguageTags/LanguageTag.cs98.57% <98.57%> (ø)
LanguageTags/LogOptions.cs80.95% <80.95%> (ø)
LanguageTags/LanguageLookup.cs75.41% <75.41%> (ø)
LanguageTags/LanguageTagParser.cs86.83% <86.83%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

LanguageSchema.cs still hardcodes CRLF (NewLine = "\r\n") for JSON source generation, which contradicts the LF-default goal and can reintroduce CRLF on regeneration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR aligns the repository with the fleet’s LF line-ending default by updating git/editor configuration, renormalizing tracked files, and adjusting codegen/output emitters so regenerated artifacts won’t reintroduce CRLF under the new policy.

Changes:

  • Switches repo-wide normalization to LF via .gitattributes, with CRLF pinned only for *.bat/*.cmd and LanguageData/** pinned as -text.
  • Carries the hub’s .editorconfig-checker.jsonExclude patterns and renormalizes files to the new line-ending policy.
  • Updates code/emitter-related newline behavior (notably data/codegen emitters), though one JSON source-gen newline setting still appears to be CRLF.
File summaries
FileDescription
version.jsonRenormalized line endings/formatting under new LF policy.
spec/secrets.jsonRenormalized line endings/formatting under new LF policy.
repo-config/settings.jsonRenormalized line endings/formatting under new LF policy.
repo-config/main.jsonRenormalized line endings/formatting under new LF policy.
repo-config/develop.jsonRenormalized line endings/formatting under new LF policy.
LICENSERenormalized line endings under new LF policy.
LanguageTagsTests/UnM49Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Rfc5646Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogOptionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LogExtensionsTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagsTests.csprojRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagParserTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageTagBuilderTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageSchemaTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/LanguageLookupTests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6393Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/Iso6392Tests.csRenormalized line endings under new LF policy.
LanguageTagsTests/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsTests/Fixture.csRenormalized line endings under new LF policy.
LanguageTagsTests/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTagsCreate/Program.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LoggerFactory.csRenormalized line endings under new LF policy.
LanguageTagsCreate/LanguageTagsCreate.csprojRenormalized line endings under new LF policy.
LanguageTagsCreate/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTagsCreate/Extensions.csRenormalized line endings under new LF policy.
LanguageTagsCreate/CommandLine.csRenormalized line endings under new LF policy.
LanguageTagsCreate/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags/LogOptions.csRenormalized line endings under new LF policy.
LanguageTags/LanguageTags.csprojRenormalized line endings under new LF policy.
LanguageTags/LanguageTagBuilder.csRenormalized line endings under new LF policy.
LanguageTags/LanguageSchema.csContains JSON source-gen NewLine configuration; still set to CRLF and should be updated to LF.
LanguageTags/GlobalUsings.csRenormalized line endings under new LF policy.
LanguageTags/Extensions.csRenormalized line endings under new LF policy.
LanguageTags/.editorconfigRenormalized line endings/formatting under new LF policy.
LanguageTags.slnxRenormalized line endings under new LF policy.
LanguageTags.code-workspaceRenormalized line endings under new LF policy.
HISTORY.mdRenormalized line endings under new LF policy.
global.jsonRenormalized line endings under new LF policy.
Directory.Packages.propsRenormalized line endings under new LF policy.
Directory.Build.propsRenormalized line endings under new LF policy.
cspell.jsonRenormalized line endings under new LF policy.
CODESTYLE.mdRenormalized line endings under new LF policy.
codecov.ymlRenormalized line endings under new LF policy.
CLAUDE.mdRenormalized line endings under new LF policy.
AUDIT.mdRenormalized line endings under new LF policy.
.vscode/tasks.jsonRenormalized line endings under new LF policy.
.vscode/launch.jsonRenormalized line endings under new LF policy.
.markdownlint-cli2.jsoncRenormalized line endings under new LF policy.
.husky/task-runner.jsonRenormalized line endings under new LF policy.
.gitignoreRenormalized line endings under new LF policy.
.github/dependabot.ymlRenormalized line endings under new LF policy.
.gitattributesChanges default normalization to * text=auto eol=lf, pins *.bat/*.cmd to CRLF, and preserves LanguageData/** bytes via -text.
.editorconfig-checker.jsonAdds hub-carried Exclude patterns while keeping existing disables.
.config/dotnet-tools.jsonRenormalized line endings under new LF policy.
Review details
  • Files reviewed: 9/75 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment threadLanguageTags/LanguageSchema.cs
@qodo-code-review

qodo-code-reviewBot commented Aug 29, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Repository files lose existing endings✗ Dismissed📘 Rule violation⚙ Maintainability
Description
The PR rewrites content-identical files such as version.json from CRLF to LF, causing every line
to appear modified solely because of line-ending changes. This directly violates the requirement to
preserve each edited file's existing dominant line-ending style.
Code

version.json[3]

+	"version": "1.5",
Relevance

●●● Strong

The finding identifies wholesale line-ending-only rewrites, directly contrary to the explicit
preservation rule; historical results show no close rejection.

PR-#206

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826705 prohibits unchanged-content lines from appearing modified solely due to an LF/CRLF
conversion. The PR replaces every line of version.json without changing its values, while the new
repository policy explicitly normalizes detected text to LF.

Rule 2826705: Preserve existing line endings when editing files
version.json[1-10]
.gitattributes[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The PR renormalizes content-identical tracked files from CRLF to LF, while the compliance rule requires existing line endings to be preserved.
## Issue Context
`version.json` retains the same version value and content, but its entire file is replaced due only to line-ending conversion. Avoid repository-wide EOL-only rewrites and preserve each existing file's dominant endings.
## Fix Focus Areas
- version.json[1-10]
- .gitattributes[1-3]
- .editorconfig[16-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Non-workflow YAML forced to LF✗ Dismissed📘 Rule violation§ Compliance
Description
The new catch-all eol=lf policy also applies to non-workflow YAML files such as codecov.yml and
.github/dependabot.yml, and no YAML-specific CRLF override remains. Those files therefore violate
the explicit requirement that non-workflow YAML use CRLF.
Code

.gitattributes[3]

+* text=auto eol=lf
Relevance

●●● Strong

The finding directly conflicts with the repository’s explicit YAML-specific CRLF requirement; no
rejection precedent supports ignoring that exception.

PR-#206
PR-#243

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2826753 requires every non-workflow .yml or .yaml file to use CRLF. The changed
.gitattributes applies LF to all detected text and exempts only batch/command files, while
.editorconfig likewise leaves YAML under the global LF default; the PR renormalizes codecov.yml
and .github/dependabot.yml accordingly.

Rule 2826753: Non-workflow YAML files must use CRLF line endings
.gitattributes[1-7]
.editorconfig[19-41]
codecov.yml[1-27]
.github/dependabot.yml[1-57]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution
## Issue description
The catch-all LF policy forces non-workflow YAML files to LF, contrary to the required CRLF convention.
## Issue Context
Add YAML-specific CRLF rules and retain a later, more-specific LF override for `.github/workflows/` so workflow YAML remains compliant.
## Fix Focus Areas
- .gitattributes[1-7]
- .editorconfig[19-41]
- codecov.yml[1-27]
- .github/dependabot.yml[1-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 26 rules
Review mode: ⚖️ Balanced: This is predominantly a broad, mechanical line-ending renormalization; only a few intentional policy/codegen edits carry logic risk, so it is not dense enough to justify redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment threadversion.json
Comment thread.gitattributes
Adopts the hub's current .editorconfig / .gitattributes / .editorconfig-checker.json
shape: [*] end_of_line = lf with CRLF pinned only for *.bat/*.cmd (Windows requires
it), and git-level text=auto eol=lf normalization to match. This repo's own CRLF
default (PR #242) matched the fleet template as it stood in July; the hub has since
flipped its own default to LF, and the line-ending policy keeps release repos on
the fleet LF default (no operational-repo override applies here). LanguageData/
stays byte-preserved via an explicit .gitattributes pin, since the prior '* -text'
repo-wide default no longer covers it. Renormalizes every tracked file's line
endings to match (content unchanged, verified with --ignore-cr-at-eol); updates the
two docs that described the old CRLF default.
Also fixes the five codegen data-file emitters (Iso6392Data, Iso6393Data,
Rfc5646Data, UnM49Data, LanguageSchema's JsonSourceGenerationOptions), which
hardcoded a CRLF NewLine to match the old default. Left as-is, regenerating any
*DataGen.cs or LanguageData/*.json locally would emit CRLF and either fail
editorconfig-checker or drift from the codegen-drift CI gate under the new LF
default. Regenerates and commits LanguageData/*.json offline (--skip-download) to
match, verified content-identical (--ignore-cr-at-eol).
CopilotAI review requested due to automatic review settings August 29, 2026 19:28
@ptr727
ptr727force-pushed the resync/line-endings-lf branch from 7478f7c to 4ee66b6CompareAugust 29, 2026 19:28
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 1, "Repository files lose existing endings" (version.json etc.): declined, this is the PR's intended effect, not a violation of it. The fleet's line-ending discipline (comment-and-doc-style Skill, "Line endings" > "Editing discipline") distinguishes an ordinary content edit, which must preserve a file's existing ending, from "Fixing a non-compliant file: bring it to its .editorconfig ending as a deliberate change, and prefer to isolate it in its own EOL-only commit so the churn is reviewable" - exactly what this PR does. It converges this repo's stale CRLF default with the fleet hub's current LF default (verified live against ptr727/ProjectTemplate@main). Every renormalized file is content-identical, verified with git diff --ignore-cr-at-eol returning empty against the parent commit.

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Answering Qodo's suppressed finding 2, "Non-workflow yaml forced to lf" (codecov.yml, .github/dependabot.yml etc.): declined, the CRLF-for-non-workflow-YAML / LF-for-workflow-YAML split it wants restored no longer applies. That split existed only because this repo's old [*] default was CRLF while workflow YAML specifically needed LF (Dependabot/Actions rewrite it that way). The fleet hub's current line-ending policy states explicitly: "Everything else, including YAML (workflow and non-workflow alike, no distinction needed now that both are LF), ... takes the [*] default with no override" (comment-and-doc-style Skill, references/line-endings.md). Verified against ptr727/ProjectTemplate@main's current .editorconfig/.gitattributes directly: neither declares a YAML-specific line ending, workflow or otherwise.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The changes consistently enforce LF defaults (with explicit CRLF/byte-preserve exceptions) and update generators to prevent future line-ending drift.

Review details
  • Files reviewed: 10/79 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@ptr727
ptr727 merged commit e5a56f1 into developAug 29, 2026
15 checks passed
@ptr727
ptr727 deleted the resync/line-endings-lf branch August 29, 2026 19:38
This was referenced Aug 29, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ptr727