mirror of
https://github.com/di-sukharev/opencommit.git
synced 2026-01-12 23:28:16 -05:00
Compare commits
4 Commits
improve-pr
...
#238-add_t
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b25aabbb8 | ||
|
|
e6a145841c | ||
|
|
99975c154e | ||
|
|
67dff60a7d |
12
__tests__/cli.test.ts
Normal file
12
__tests__/cli.test.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
// @ts-ignore
|
||||
// import { jest } from '@jest/globals';
|
||||
|
||||
import { generateCommitMessageByDiff } from '../src/generateCommitMessageFromGitDiff';
|
||||
|
||||
test.skip('generateCommitMessageFromGitDiff', async () => {
|
||||
const GIT_DIFF = ``;
|
||||
|
||||
const res = await generateCommitMessageByDiff(GIT_DIFF);
|
||||
|
||||
expect(res).toBe('lol');
|
||||
});
|
||||
79
__tests__/split-files.test.ts
Normal file
79
__tests__/split-files.test.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import { getCommitMsgsPromisesFromFileDiffs } from '../src/generateCommitMessageFromGitDiff';
|
||||
|
||||
const oneFileThreeChanges = `diff --git a/example.txt b/example.txt
|
||||
index e69de29..3f6a3fa 100644
|
||||
--- a/example.txt
|
||||
+++ b/example.txt
|
||||
@@ -1,2 +1,2 @@
|
||||
-Hello, World!
|
||||
+Hello, everyone!
|
||||
This is an example file.
|
||||
@@ -4,2 +4,2 @@
|
||||
-Goodbye, World!
|
||||
+Goodbye, everyone!
|
||||
Have a great day!
|
||||
@@ -7,2 +7,2 @@
|
||||
-It's a sunny day!
|
||||
+It's a rainy day!
|
||||
Let's go for a walk.`;
|
||||
|
||||
const fourFilesOneChangeEach = `diff --git a/file1.txt b/file1.txt
|
||||
index e69de29..3f6a3fa 100644
|
||||
--- a/file1.txt
|
||||
+++ b/file1.txt
|
||||
@@ -1,2 +1,2 @@
|
||||
-Hello, World!
|
||||
+Hello, everyone!
|
||||
This is file 1.
|
||||
|
||||
diff --git a/file2.txt b/file2.txt
|
||||
index 87c0ddc..d7b182e 100644
|
||||
--- a/file2.txt
|
||||
+++ b/file2.txt
|
||||
@@ -1,3 +1,3 @@
|
||||
This is file 2.
|
||||
-Goodbye, World!
|
||||
+Goodbye, everyone!
|
||||
Have a great day!
|
||||
|
||||
diff --git a/file3.txt b/file3.txt
|
||||
index e69de29..3f6a3fa 100644
|
||||
--- a/file3.txt
|
||||
+++ b/file3.txt
|
||||
@@ -1,4 +1,4 @@
|
||||
This is file 3.
|
||||
-It's a sunny day!
|
||||
+It's a rainy day!
|
||||
Let's go for a walk.
|
||||
|
||||
diff --git a/file4.txt b/file4.txt
|
||||
index 3f6a3fa..87c0ddc 100644
|
||||
--- a/file4.txt
|
||||
+++ b/file4.txt
|
||||
@@ -1,5 +1,5 @@
|
||||
This is file 4.
|
||||
-It's time to sleep.
|
||||
+It's time to wake up.
|
||||
Goodnight.
|
||||
`;
|
||||
|
||||
test('1', async () => {
|
||||
const MAX_LENGTH = 50;
|
||||
const oneFile3Changes = await getCommitMsgsPromisesFromFileDiffs(
|
||||
oneFileThreeChanges,
|
||||
MAX_LENGTH
|
||||
);
|
||||
|
||||
expect(oneFile3Changes).toBe('lol');
|
||||
});
|
||||
|
||||
test('2', async () => {
|
||||
const MAX_LENGTH = 50;
|
||||
|
||||
const fourFilesOneChange = await getCommitMsgsPromisesFromFileDiffs(
|
||||
fourFilesOneChangeEach,
|
||||
MAX_LENGTH
|
||||
);
|
||||
|
||||
expect(fourFilesOneChange).toBe('lol');
|
||||
});
|
||||
21
jest.config.ts
Normal file
21
jest.config.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import type { JestConfigWithTsJest } from 'ts-jest';
|
||||
|
||||
const jestConfig: JestConfigWithTsJest = {
|
||||
// [...]
|
||||
extensionsToTreatAsEsm: ['.ts'],
|
||||
moduleNameMapper: {
|
||||
'^(\\.{1,2}/.*)\\.js$': '$1'
|
||||
},
|
||||
transform: {
|
||||
// '^.+\\.[tj]sx?$' to process js/ts with `ts-jest`
|
||||
// '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest`
|
||||
'^.+\\.tsx?$': [
|
||||
'ts-jest',
|
||||
{
|
||||
useESM: true
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
export default jestConfig;
|
||||
3877
package-lock.json
generated
3877
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -45,19 +45,23 @@
|
||||
"build:push": "npm run build && git add . && git commit -m 'build' && git push",
|
||||
"deploy": "npm run build:push && npm version patch && git push --tags && npm publish --tag latest",
|
||||
"lint": "eslint src --ext ts && tsc --noEmit",
|
||||
"format": "prettier --write src"
|
||||
"format": "prettier --write src",
|
||||
"test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose --coverage --config jest.config.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/types": "^17.4.4",
|
||||
"@types/ini": "^1.3.31",
|
||||
"@types/inquirer": "^9.0.3",
|
||||
"@types/jest": "^29.5.4",
|
||||
"@types/node": "^16.18.14",
|
||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.45.0",
|
||||
"dotenv": "^16.0.3",
|
||||
"esbuild": "^0.15.18",
|
||||
"eslint": "^8.28.0",
|
||||
"jest": "^29.6.4",
|
||||
"prettier": "^2.8.4",
|
||||
"ts-jest": "^29.1.1",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.3"
|
||||
},
|
||||
|
||||
@@ -199,17 +199,17 @@ export async function commit(
|
||||
}
|
||||
|
||||
if (stagedFiles.length === 0 && changedFiles.length > 0) {
|
||||
const files = (await multiselect({
|
||||
const files = await multiselect({
|
||||
message: chalk.cyan('Select the files you want to add to the commit:'),
|
||||
options: changedFiles.map((file) => ({
|
||||
value: file,
|
||||
label: file
|
||||
}))
|
||||
})) as string[];
|
||||
});
|
||||
|
||||
if (isCancel(files)) process.exit(1);
|
||||
|
||||
await gitAdd({ files });
|
||||
await gitAdd({ files: files as string[] });
|
||||
}
|
||||
|
||||
await commit(extraArgs, false);
|
||||
|
||||
@@ -20,11 +20,18 @@ export const IDENTITY =
|
||||
|
||||
const INIT_MAIN_PROMPT = (language: string): ChatCompletionRequestMessage => ({
|
||||
role: ChatCompletionRequestMessageRoleEnum.System,
|
||||
// prettier-ignore
|
||||
content: `${IDENTITY} Your mission is to create clean and comprehensive commit messages in the conventional commit convention and explain WHAT were the changes and WHY the changes were done. I'll send you an output of 'git diff --staged' command, and you convert it into a commit message.
|
||||
${config?.OCO_EMOJI ? 'Use GitMoji convention to preface the commit.' : 'Do not preface the commit with anything.'}
|
||||
${config?.OCO_DESCRIPTION ? 'Add a short description of WHY the changes are done after the commit message. Don\'t start it with "This commit", just describe the changes.' : "Don't add any descriptions to the commit, only commit message."}
|
||||
Use the present tense. Lines must not be longer than 74 characters. Use ${language} to answer.`
|
||||
content: `${IDENTITY} Your mission is to create clean and comprehensive commit messages as per the conventional commit convention and explain WHAT were the changes and mainly WHY the changes were done. I'll send you an output of 'git diff --staged' command, and you are to convert it into a commit message.
|
||||
${
|
||||
config?.OCO_EMOJI
|
||||
? 'Use GitMoji convention to preface the commit.'
|
||||
: 'Do not preface the commit with anything.'
|
||||
}
|
||||
${
|
||||
config?.OCO_DESCRIPTION
|
||||
? 'Add a short description of WHY the changes are done after the commit message. Don\'t start it with "This commit", just describe the changes.'
|
||||
: "Don't add any descriptions to the commit, only commit message."
|
||||
}
|
||||
Use the present tense. Lines must not be longer than 74 characters. Use ${language} for the commit message.`
|
||||
});
|
||||
|
||||
export const INIT_DIFF_PROMPT: ChatCompletionRequestMessage = {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ESNext",
|
||||
"lib": ["ES5", "ES6"],
|
||||
|
||||
"module": "ESNext",
|
||||
|
||||
"lib": ["ES5", "ES6"],
|
||||
// "rootDir": "./src",
|
||||
"resolveJsonModule": true,
|
||||
"moduleResolution": "node",
|
||||
|
||||
Reference in New Issue
Block a user