Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(engine): commit classify based type inclueded #416

Merged
merged 2 commits into from
Aug 30, 2023

Conversation

blan19
Copy link
Member

@blan19 blan19 commented Aug 29, 2023

Related issue

#187

Result

스크린샷 2023-08-29 오후 4 33 46

기존에 : prefix로 분류하던 것을 커밋 메세지안에 특정 커밋 타입이 포함되어 있는지 아닌지로 분류하였습니다.

Work list

commit.util.ts
CommitMessageType.ts
parser.spec.ts

Discussion

특정 커밋 타입이 포함되어 있는지 아닌지로 분류하기 때문에 CommitMessageType 배열 순서에 의존하고 있습니다.

예를들어 "feat(engine): build stem & CSM based on passed branch name (#198)" 이 커밋 메세지가 존재하고

저희의 커밋 메세지 타입 배열 순서가 아래와 같다면

const CommitMessageTypeList = [
  "feat",
  "chore",
  "ci",
  "docs",
  "build",
  "fix",
  "pert",
  "refactor",
  "revert",
  "style",
  "test",
];

커밋 타입이 feat이여야 하는게 배열 순서에 의존하게 되어 build로 분류되어 나오게 됩니다.

@blan19 blan19 requested a review from a team as a code owner August 29, 2023 07:39
@blan19 blan19 self-assigned this Aug 29, 2023
@blan19 blan19 requested a review from a team as a code owner August 29, 2023 07:39
Copy link
Contributor

@KyuTae98 KyuTae98 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오!! commit을 type별로 정리할때 매우 필요한 기능같아요!! LGTM!!!

@blan19 blan19 changed the title refactor: commit classify based type inclueded refactor(engine): commit classify based type inclueded Aug 29, 2023
Comment on lines 23 to 27
for (let index = 0; index < CommitMessageTypeList.length; index++) {
if (lowerCaseMessage.includes(CommitMessageTypeList[index])) {
type = CommitMessageTypeList[index];
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

includes를 사용하셨는데 indexOf를 사용하시면 어떨까요?? ㅎㅎ 그냥 아이디어 한 번 던져봤습니다!

Copy link
Member Author

@blan19 blan19 Aug 29, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

indexOf도 좋은 아이디어 인 것 같아요 ㅎㅎ bb
성능이 막 차이 나지 않는 경우 코드가 좀 더 이뻐보이는 includes를 사용하는 편인데, indexOf로 저기 if문 내부에서 이쁘게 작성하는 팁이 있으실까요? 😀
한번 더 형변환하거나 그러면 과해보이는 것 같은 느낌을 줘서..

// 이 경우 값이 존재하지 않을 때 -1를 뱉고 조건문 내부에도 진입하게 됨
if (lowerCaseMessage.indexOf(CommitMessageTypeList[index])) {
      type = CommitMessageTypeList[index];
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드가 예쁘게 작성될지는 모르겠는데 indexOf를 사용하면 Discussion에 말씀하신 문제를 해결하실 수 있을 것 같아서 제안드려봤습니다!!

if (lowerCaseMessage.indexOf(CommitMessageTypeList[index]) >= 0) {
  if (type === "") type = CommitMessageTypeList[index];
  else {
    // indexOf(type) 과 indexOf(CommitMessageTypeList[index]) 를 비교하여 더 작은 값을 type으로
  }
}

코드가 예쁘진 않은데 커밋 타입이 앞에 나온다는 점을 이용해봤습니다.

Copy link
Contributor

@ytaek ytaek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 좋습니다!!!

추후에 multiple type으로도 classification 해보는 것도 좋을 것 같네요 : -)

* : -> type과 message 구분
*/
const separatorIdx = messagePrefix.search(/[(!:]/);
for (let index = 0; index < CommitMessageTypeList.length; index++) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

forEach를 안쓰고 index를 쓰신 이유가 있을까용?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

처음에 저도 forEach를 쓰는 방안을 생각했었는데, 이 부분은 제가 Discussion에 나와 있는 부분을 고려하여 중간에 break를 걸어 줄 필요가 있다고 생각해서 코드를 작성했었습니다.

for (let index = 0; index < CommitMessageTypeList.length; index++) {
  if(lowerCaseMessage.includes(CommitMessageTypeList[index])) {
      type = CommitMessageTypeList[index];
      ...
      break;
    }
}

커밋 타입이 아직은 많지 않고 메세지도 대부분이 길지는 않겠지만
이렇게 이후에 쓸 데 없는 순회를 더 하지 않으려고 초기에 코드를 작성했었어요 ㅋㅋ

이후에 최종 커밋을 하고 PR을 보낼 땐 테스크 코드를 통과하기 위해 break를 지운 후 커밋했습니다.

어떻게 하면 불필요한 순회를 줄일 수 있을 까하여 Discussion에 적어봤습니다!

@inthejim inthejim requested review from inthejim and removed request for inthejim August 29, 2023 15:20
Copy link
Contributor

@inthejim inthejim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

prefix가 아니라 메시지 안에서 찾아서 사용할 수 있어서, 룰이 통일되지 않은 커밋 메시지 분류할 때도 좋을 것 같아요!! 메시지 안에서 찾는다면, 커밋 메시지 타입당 찾을 수 있는 keyword가 여러개가 되도 좋을 것 같습니다!

@ytaek
Copy link
Contributor

ytaek commented Aug 29, 2023

prefix가 아니라 메시지 안에서 찾아서 사용할 수 있어서, 룰이 통일되지 않은 커밋 메시지 분류할 때도 좋을 것 같아요!! 메시지 안에서 찾는다면, 커밋 메시지 타입당 찾을 수 있는 keyword가 여러개가 되도 좋을 것 같습니다!

아 맞습니다!! 이것도 추후에 추가되면 좋을 것 같습니다.

githru paper에서 인용한 on the nature of commits 이라는 paper는 아래와 같은 분류를 사용합니다.
image

이걸 활용해봐도 좋을 것 같네요 👍

@blan19 님, 이것도 이슈로 등록해주시면 좋겠습니다~.

@blan19 blan19 merged commit 7d1d70a into main Aug 30, 2023
2 checks passed
@blan19 blan19 deleted the engine/commit-message-type branch August 30, 2023 07:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants