fix(cz-commitlint): add VS16 to single character emojis#4666
fix(cz-commitlint): add VS16 to single character emojis#4666escapedcat merged 1 commit intoconventional-changelog:masterfrom
Conversation
Review Summary by QodoAdd VS16 normalization for single-character emoji alignment
WalkthroughsDescription• Normalize single-character emojis by adding VS16 (U+FE0F) for consistent terminal alignment • Implement emoji presentation detection using Unicode properties and grapheme segmentation • Add comprehensive test coverage for emoji normalization with various emoji types Diagramflowchart LR
A["Raw emoji input"] --> B["normalizeEmoji function"]
B --> C["Detect emoji type"]
C --> D1["Emoji_Presentation or has VS16/VS15"]
C --> D2["Text-style emoji base"]
D1 --> E["Return unchanged"]
D2 --> F["Append VS16 U+FE0F"]
E --> G["Aligned terminal display"]
F --> G
File Changes1. @commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts
|
Code Review by Qodo
1. Intl.Segmenter typings missing
|
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. |
0985316 to
6fdf099
Compare
There was a problem hiding this comment.
Pull request overview
This PR improves the @commitlint/cz-commitlint interactive enum prompt formatting by normalizing certain emojis to use emoji presentation (VS16), avoiding terminal column misalignment when some emojis render at text-width.
Changes:
- Add an emoji normalizer that appends VS16 (U+FE0F) for single-grapheme emojis that are
\p{Emoji}but not\p{Emoji_Presentation}and don’t already specify a variation selector. - Apply normalization when building enum list display strings.
- Extend unit tests to cover VS16 normalization behavior (including when
emojiInHeaderis enabled).
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| @commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts | Introduces normalizeEmoji() and applies it to enum emoji rendering. |
| @commitlint/cz-commitlint/src/services/getRuleQuestionConfig.test.ts | Adds/updates tests asserting VS16 normalization and adjusted spacing expectations. |
Comments suppressed due to low confidence (1)
@commitlint/cz-commitlint/src/services/getRuleQuestionConfig.ts:110
- The normalization currently affects
valuewhenemojiInHeaderis true, meaning the selected enum value (and therefore the committed header) can change from the emoji configured by the user (e.g. 🛠 -> 🛠️ via VS16). If the intent is only to fix prompt alignment, consider using the normalized emoji forname/display but keepingvaluebased on the raw configured emoji (trimmed), or make this behavior opt-in to avoid a breaking change for existing configs.
if (enumDescription) {
const rawEmoji = enumDescriptions[enumName]?.emoji;
const emoji = rawEmoji ? normalizeEmoji(rawEmoji) : rawEmoji;
const emojiPrefix = emoji
? `${emoji} `
: hasConsistentEmojiUsage
? ""
: " ";
const paddedName = `${enumName}:`.padEnd(longest + 4);
const name = `${emojiPrefix}${paddedName}${enumDescription}`;
const value =
emojiInHeader && emoji ? `${emoji.trim()} ${enumName}` : enumName;
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
Single character emojis like 🛠 or 🗑 do not align with 2 character emojis in the rendered menu.
6fdf099 to
b89b000
Compare
Description
Single character emojis like 🛠 or 🗑 do not align with 2 character emojis in the rendered menu.
This adds character VS16 to single column width emojis to align them with 2 column width emojis.
Motivation and Context
Usage examples
How Has This Been Tested?
Added unit tests and used the local version to create the new Usage example.
Types of changes
Checklist: