Skip to content
This repository was archived by the owner on Jan 14, 2026. It is now read-only.

Commit 5c1ff7f

Browse files
committed
refactor(git): improve formatting and readability in release notes
- adjust whitespace and indentation for consistency in generate_release_notes - split long lines and clarify string concatenation for error messages - fix minor formatting issues in contributors and commit grouping sections - update git_read to use multiline assignment for generate_release_notes call
1 parent 55ab246 commit 5c1ff7f

2 files changed

Lines changed: 30 additions & 28 deletions

File tree

lua/codecompanion/_extensions/gitcommit/tools/git.lua

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ end
699699
---@return string llm_msg
700700
function GitTool.generate_release_notes(from_tag, to_tag, format)
701701
format = format or "markdown"
702-
702+
703703
-- Get all tags sorted by version
704704
local success, tags_output = pcall(vim.fn.system, "git tag --sort=-version:refname")
705705
if not success or vim.v.shell_error ~= 0 then
@@ -708,26 +708,26 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
708708
local llm_msg = "<gitReleaseNotes>fail: " .. msg .. "</gitReleaseNotes>"
709709
return false, msg, user_msg, llm_msg
710710
end
711-
711+
712712
local tags = {}
713713
for tag in tags_output:gmatch("[^\r\n]+") do
714714
if tag ~= "" then
715715
table.insert(tags, tag)
716716
end
717717
end
718-
718+
719719
if #tags < 1 then
720720
local msg = "No tags found in repository"
721721
local user_msg = msg
722722
local llm_msg = "<gitReleaseNotes>fail: " .. msg .. "</gitReleaseNotes>"
723723
return false, msg, user_msg, llm_msg
724724
end
725-
725+
726726
-- Determine tag range
727727
if not to_tag then
728728
to_tag = tags[1] -- Latest tag
729729
end
730-
730+
731731
if not from_tag then
732732
if #tags < 2 then
733733
local msg = "Cannot generate release notes: only one tag found. Please specify from_tag parameter."
@@ -737,19 +737,24 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
737737
end
738738
from_tag = tags[2] -- Second latest tag
739739
end
740-
740+
741741
-- Get commit range between tags
742742
local range = from_tag .. ".." .. to_tag
743743
local commit_cmd = "git log --pretty=format:'%h|%s|%an|%ad' --date=short " .. range
744744
local success_commits, commits_output = pcall(vim.fn.system, commit_cmd)
745-
745+
746746
if not success_commits or vim.v.shell_error ~= 0 then
747-
local msg = "Failed to get commits between " .. from_tag .. " and " .. to_tag .. ": " .. (commits_output or "unknown error")
747+
local msg = "Failed to get commits between "
748+
.. from_tag
749+
.. " and "
750+
.. to_tag
751+
.. ": "
752+
.. (commits_output or "unknown error")
748753
local user_msg = msg
749754
local llm_msg = "<gitReleaseNotes>fail: " .. msg .. "</gitReleaseNotes>"
750755
return false, msg, user_msg, llm_msg
751756
end
752-
757+
753758
-- Parse commits
754759
local commits = {}
755760
for line in commits_output:gmatch("[^\r\n]+") do
@@ -759,32 +764,32 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
759764
hash = hash,
760765
subject = subject,
761766
author = author,
762-
date = date
767+
date = date,
763768
})
764769
end
765770
end
766-
771+
767772
if #commits == 0 then
768773
local msg = "No commits found between " .. from_tag .. " and " .. to_tag
769774
local user_msg = msg
770775
local llm_msg = "<gitReleaseNotes>success: " .. msg .. "</gitReleaseNotes>"
771776
return true, msg, user_msg, llm_msg
772777
end
773-
778+
774779
-- Generate release notes based on format
775780
local release_notes = ""
776781
local user_msg = ""
777782
local llm_msg = ""
778-
783+
779784
if format == "markdown" then
780785
release_notes = "# Release Notes: " .. from_tag .. "" .. to_tag .. "\n\n"
781786
release_notes = release_notes .. "## Changes (" .. #commits .. " commits)\n\n"
782-
787+
783788
-- Group commits by type (conventional commits)
784789
local features = {}
785790
local fixes = {}
786791
local others = {}
787-
792+
788793
for _, commit in ipairs(commits) do
789794
local type_match = commit.subject:match("^(%w+):")
790795
if type_match then
@@ -799,7 +804,7 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
799804
table.insert(others, commit)
800805
end
801806
end
802-
807+
803808
-- Add features
804809
if #features > 0 then
805810
release_notes = release_notes .. "### ✨ New Features\n\n"
@@ -808,7 +813,7 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
808813
end
809814
release_notes = release_notes .. "\n"
810815
end
811-
816+
812817
-- Add fixes
813818
if #fixes > 0 then
814819
release_notes = release_notes .. "### 🐛 Bug Fixes\n\n"
@@ -817,7 +822,7 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
817822
end
818823
release_notes = release_notes .. "\n"
819824
end
820-
825+
821826
-- Add other changes
822827
if #others > 0 then
823828
release_notes = release_notes .. "### 📝 Other Changes\n\n"
@@ -826,7 +831,7 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
826831
end
827832
release_notes = release_notes .. "\n"
828833
end
829-
834+
830835
-- Add contributors
831836
local contributors = {}
832837
for _, commit in ipairs(commits) do
@@ -835,7 +840,7 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
835840
end
836841
contributors[commit.author] = contributors[commit.author] + 1
837842
end
838-
843+
839844
release_notes = release_notes .. "### 👥 Contributors\n\n"
840845
local sorted_authors = {}
841846
for author in pairs(contributors) do
@@ -850,34 +855,30 @@ function GitTool.generate_release_notes(from_tag, to_tag, format)
850855
for _, author in ipairs(sorted_authors) do
851856
release_notes = release_notes .. "- " .. author .. " (" .. contributors[author] .. " commits)\n"
852857
end
853-
end
854-
855858
elseif format == "plain" then
856859
release_notes = "Release Notes: " .. from_tag .. "" .. to_tag .. "\n"
857860
release_notes = release_notes .. "Changes (" .. #commits .. " commits):\n\n"
858861
for _, commit in ipairs(commits) do
859862
release_notes = release_notes .. "- " .. commit.subject .. " (" .. commit.hash .. " by " .. commit.author .. ")\n"
860863
end
861-
862864
elseif format == "json" then
863865
local json_data = {
864866
from_tag = from_tag,
865867
to_tag = to_tag,
866868
total_commits = #commits,
867-
commits = commits
869+
commits = commits,
868870
}
869871
release_notes = vim.fn.json_encode(json_data)
870-
871872
else
872873
local msg = "Unsupported format: " .. format .. ". Supported formats: markdown, plain, json"
873874
local user_msg = msg
874875
local llm_msg = "<gitReleaseNotes>fail: " .. msg .. "</gitReleaseNotes>"
875876
return false, msg, user_msg, llm_msg
876877
end
877-
878+
878879
user_msg = "Generated release notes for " .. from_tag .. "" .. to_tag .. " (" .. #commits .. " commits)"
879880
llm_msg = "<gitReleaseNotes>success: " .. user_msg .. "\n\n" .. release_notes .. "</gitReleaseNotes>"
880-
881+
881882
return true, release_notes, user_msg, llm_msg
882883
end
883884

lua/codecompanion/_extensions/gitcommit/tools/git_read.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ GitRead.cmds = {
196196
elseif operation == "tags" then
197197
success, output, user_msg, llm_msg = GitTool.get_tags()
198198
elseif operation == "generate_release_notes" then
199-
success, output, user_msg, llm_msg = GitTool.generate_release_notes(op_args.from_tag, op_args.to_tag, op_args.release_format)
199+
success, output, user_msg, llm_msg =
200+
GitTool.generate_release_notes(op_args.from_tag, op_args.to_tag, op_args.release_format)
200201
elseif operation == "gitignore_get" then
201202
success, output, user_msg, llm_msg = GitTool.get_gitignore()
202203
elseif operation == "gitignore_check" then

0 commit comments

Comments
 (0)