Skip to content

Commit 793e15e

Browse files
committed
feat: add 9 new last words detection patterns
Add patterns for initial commit, revert, hotfix, cleanup, bump version, remove/delete, refactor, todo/fixme, and dependencies. Each maps to a short developer-flavored quip. Includes tests for all new patterns. Closes #11
1 parent 5d4a8fe commit 793e15e

2 files changed

Lines changed: 57 additions & 1 deletion

File tree

src/lib/scoring.test.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import test from 'node:test'
22
import assert from 'node:assert/strict'
3-
import { computeDeathIndex } from './scoring'
3+
import { computeDeathIndex, generateLastWords } from './scoring'
44
import type { RepoData } from './types'
55

66
function buildRepo(overrides: Partial<RepoData> = {}): RepoData {
@@ -34,3 +34,50 @@ test('inactive repo with many issues gets high death index', () => {
3434
const score = computeDeathIndex(repo)
3535
assert.ok(score >= 5)
3636
})
37+
38+
// ── generateLastWords ──────────────────────────────────────────────
39+
40+
test('"initial commit" returns beginning quote', () => {
41+
const repo = buildRepo({ lastCommitMessage: 'initial commit', lastCommitDate: new Date().toISOString() })
42+
assert.equal(generateLastWords(repo), 'it was only ever the beginning')
43+
})
44+
45+
test('"revert" returns nevermind', () => {
46+
const repo = buildRepo({ lastCommitMessage: 'revert: undo migration', lastCommitDate: new Date().toISOString() })
47+
assert.equal(generateLastWords(repo), 'nevermind')
48+
})
49+
50+
test('"hotfix" returns this is fine', () => {
51+
const repo = buildRepo({ lastCommitMessage: 'hotfix: patch auth flow', lastCommitDate: new Date().toISOString() })
52+
assert.equal(generateLastWords(repo), 'this is fine')
53+
})
54+
55+
test('"cleanup" returns tidying quote', () => {
56+
const repo = buildRepo({ lastCommitMessage: 'cleanup unused imports', lastCommitDate: new Date().toISOString() })
57+
assert.equal(generateLastWords(repo), 'just tidying up before i go')
58+
})
59+
60+
test('"bump version" returns release quote', () => {
61+
const repo = buildRepo({ lastCommitMessage: 'bump version to 3.0.0', lastCommitDate: new Date().toISOString() })
62+
assert.equal(generateLastWords(repo), 'one last release into the void')
63+
})
64+
65+
test('"remove" returns burning the evidence', () => {
66+
const repo = buildRepo({ lastCommitMessage: 'remove deprecated API', lastCommitDate: new Date().toISOString() })
67+
assert.equal(generateLastWords(repo), 'burning the evidence')
68+
})
69+
70+
test('"refactor" returns architecture quote', () => {
71+
const repo = buildRepo({ lastCommitMessage: 'refactor auth module', lastCommitDate: new Date().toISOString() })
72+
assert.equal(generateLastWords(repo), 'i swear this time the architecture is right')
73+
})
74+
75+
test('"todo" returns someone else quote', () => {
76+
const repo = buildRepo({ lastCommitMessage: 'add todo for error handling', lastCommitDate: new Date().toISOString() })
77+
assert.equal(generateLastWords(repo), 'someone else will handle it')
78+
})
79+
80+
test('"dependencies" returns dependency hell', () => {
81+
const repo = buildRepo({ lastCommitMessage: 'update dependencies', lastCommitDate: new Date().toISOString() })
82+
assert.equal(generateLastWords(repo), 'trapped in dependency hell')
83+
})

src/lib/scoring.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,15 @@ export function generateLastWords(repo: RepoData): string {
138138
if (msgLower.includes('update readme')) return 'at least the docs are good'
139139
if (msgLower.includes('wip') || msgLower.includes('work in progress')) return "i'll finish this later"
140140
if (msgLower.includes('merge')) return 'dying in a merge conflict'
141+
if (msgLower.includes('initial commit')) return 'it was only ever the beginning'
142+
if (msgLower.includes('revert')) return 'nevermind'
143+
if (msgLower.includes('hotfix')) return 'this is fine'
144+
if (msgLower.includes('cleanup') || msgLower.includes('clean up')) return 'just tidying up before i go'
145+
if (msgLower.includes('bump version') || msgLower.includes('bump to')) return 'one last release into the void'
146+
if (msgLower.includes('remove') || msgLower.includes('delete')) return 'burning the evidence'
147+
if (msgLower.includes('refactor')) return 'i swear this time the architecture is right'
148+
if (msgLower.includes('todo') || msgLower.includes('fixme')) return 'someone else will handle it'
149+
if (msgLower.includes('dependency') || msgLower.includes('dependencies')) return 'trapped in dependency hell'
141150
if (daysSince > 730 && repo.stargazersCount === 0) return "i'll finish this later"
142151
if (repo.stargazersCount > 200 && daysSince > 365) return 'i thought people liked me'
143152

0 commit comments

Comments
 (0)