Skip to content

Commit 04e4fde

Browse files
committed
build: refactor to squeeze multiple empty lines into single empty lines
--- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent a28c935 commit 04e4fde

File tree

1 file changed

+26
-24
lines changed

1 file changed

+26
-24
lines changed

lib/node_modules/@stdlib/_tools/changelog/generate/lib/breaking_changes.js

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -39,34 +39,48 @@ var RE_YAML_DELIMITER = /^\s*---\s*$/;
3939
// FUNCTIONS //
4040

4141
/**
42-
* Strips YAML frontmatter blocks from text lines.
42+
* Processes commit message text by removing YAML blocks and squashing multiple empty lines into a single empty line.
4343
*
4444
* @private
4545
* @param {Array<string>} lines - text lines to process
46-
* @returns {Array<string>} text lines without YAML blocks
46+
* @returns {Array<string>} text lines without YAML blocks and multiple empty lines
4747
*/
4848
function stripYamlBlocks( lines ) {
49-
var result;
49+
var previousLineEmpty;
50+
var trimmed;
5051
var inYaml;
52+
var out;
5153
var i;
5254

53-
result = [];
55+
previousLineEmpty = false;
56+
out = [];
5457
inYaml = false;
5558

5659
for ( i = 0; i < lines.length; i++ ) {
5760
// Check for YAML delimiter (---) with optional whitespace:
58-
if ( RE_YAML_DELIMITER.test( lines[i] ) ) {
61+
if ( RE_YAML_DELIMITER.test( lines[ i ] ) ) {
5962
inYaml = !inYaml; // Toggle YAML block state
6063
continue;
6164
}
6265

6366
// Only include lines that are not part of YAML blocks:
6467
if ( !inYaml ) {
65-
result.push( lines[i] );
68+
trimmed = trim( lines[ i ] );
69+
70+
if ( trimmed === '' ) {
71+
// Only add an empty line if the previous line wasn't empty:
72+
if ( !previousLineEmpty && out.length > 0 ) {
73+
previousLineEmpty = true;
74+
out.push( '' );
75+
}
76+
} else {
77+
previousLineEmpty = false;
78+
out.push( lines[ i ] ); // Preserve original line formatting
79+
}
6680
}
6781
}
6882

69-
return result;
83+
return out;
7084
}
7185

7286
/**
@@ -87,31 +101,19 @@ function stripYamlBlocks( lines ) {
87101
*/
88102
function formatBreakingChange( note ) {
89103
var contentLines;
90-
var trimmedLine;
104+
var textLines;
91105
var firstLine;
92106
var restLines;
93-
var textLines;
94107
var hash;
95108
var out;
96-
var i;
97109

98110
textLines = note.text.split( reEOL.REGEXP );
99111
contentLines = stripYamlBlocks( textLines );
100-
firstLine = '';
101-
restLines = [];
102-
hash = trim( note.hash );
103112

104-
for ( i = 0; i < contentLines.length; i++ ) {
105-
trimmedLine = trim( contentLines[i] );
106-
if ( trimmedLine !== '' ) {
107-
// If this is our first non-empty line, it's the firstLine...
108-
if ( firstLine === '' ) {
109-
firstLine = trimmedLine;
110-
} else {
111-
restLines.push( trimmedLine );
112-
}
113-
}
114-
}
113+
// If we have content, first element is the first line:
114+
firstLine = contentLines[ 0 ] || '';
115+
restLines = contentLines.slice( 1 );
116+
hash = trim( note.hash );
115117

116118
// Construct output string - use a single string concatenation when possible
117119
out = '- [`' + hash.substring( 0, 7 ) + '`](' + STDLIB_GITHUB_URL + '/' + hash + '): ' + firstLine;

0 commit comments

Comments
 (0)