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 #18

Merged
merged 17 commits into from
Sep 30, 2024
Merged

Refactor #18

merged 17 commits into from
Sep 30, 2024

Conversation

tsukimizake
Copy link
Contributor

@tsukimizake tsukimizake commented Sep 30, 2024

#17

  • aiderCommand.sendPromptを追加し、そこまではinputをstringで持ち回る形にしました
  • 同様にaiderCommand.exitを追加しました
  • aiderCommand.openIgnore, addCurrentFile, addIgnoreCurrentFileは各コマンドに特有の実装なためmainに移動しました
  • identifyAiderBufferがcallbackを取っていたのが不要そうだったのでバッファのレコードを返す形にしました
  • ついでにテストファイルは名前が_testで終わっていないと認識されないようだったのでtests/aider_test.tsにリネームしました

Summary by CodeRabbit

  • New Features

    • Introduced new methods for sending prompts and exiting jobs, enhancing command handling.
    • Improved functionality for managing Aider buffers and commands.
  • Bug Fixes

    • Removed outdated command handling related to .aiderignore, streamlining user experience.
  • Documentation

    • Updated test case to reflect NeoVim context, ensuring clarity in testing environment.
  • Refactor

    • Consolidated command registration and improved buffer management logic for better performance.

Copy link
Contributor

coderabbitai bot commented Sep 30, 2024

Walkthrough

The pull request introduces significant changes to the denops/aider module, focusing on command handling and buffer management. Key modifications include the removal of the openIgnore method, the introduction of the sendPrompt and exit methods, and a restructuring of existing commands to enhance integration with buffer functionalities. The changes streamline how prompts are sent and how commands are processed, improving overall modularity and maintainability.

Changes

Files Change Summary
denops/aider/aiderCommand.ts, denops/aider/buffer.ts, denops/aider/main.ts - Removed openIgnore method and added sendPrompt and exit methods in aiderCommand.ts.
- Refactored exitAiderBuffer in buffer.ts to use aiderCommand.exit.
- Updated command registrations in main.ts to reflect new method implementations.
tests/aider_test.ts - Updated test case name from "vim" to "nvim" to align with the testing environment.

Possibly related PRs

Suggested reviewers

  • nekowasabi

🐰 In the land of code where rabbits play,
New prompts and exits brighten the day.
Commands now dance in a structured line,
Buffers and files, all working fine.
With hops of joy, we celebrate this feat,
Aider's new rhythm, oh so sweet! 🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between f258b59 and 9e37445.

📒 Files selected for processing (1)
  • denops/aider/main.ts (6 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • denops/aider/main.ts

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@@ -1,32 +1,13 @@
import { Denops } from "https://deno.land/x/denops_std@v5.0.1/mod.ts";
import { Denops } from "https://deno.land/x/denops_std@v6.4.0/mod.ts";
Copy link
Contributor Author

@tsukimizake tsukimizake Sep 30, 2024

Choose a reason for hiding this comment

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

( ;´。 `;)なんかバージョンが違ってた

Copy link
Owner

Choose a reason for hiding this comment

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

( ;´ワ `;)ヘーキヘーキ

@@ -1,6 +1,6 @@
import { Denops } from "https://deno.land/x/denops_std@v6.4.0/mod.ts";
import * as v from "https://deno.land/x/denops_std@v6.4.0/variable/mod.ts";
import { emit } from "https://deno.land/x/denops_std@v6.5.1/autocmd/mod.ts";
import { emit } from "https://deno.land/x/denops_std@v6.4.0/autocmd/mod.ts";
Copy link
Contributor Author

Choose a reason for hiding this comment

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

( ;´。 `;)なんかバージョンが違ってた2

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (3)
denops/aider/main.ts (1)

147-163: Ensure correct relative path in .aiderignore

The forAiderIgnorePath is calculated by replacing the gitRoot in currentFile with an empty string:

const forAiderIgnorePath = currentFile.replace(gitRoot, "");

This might result in a leading slash in the path, which could affect pattern matching in .aiderignore. Consider adjusting the path to ensure it is relative without a leading slash.

Apply this diff to adjust the path:

-              const forAiderIgnorePath = currentFile.replace(gitRoot, "");
+              const forAiderIgnorePath = currentFile.replace(`${gitRoot}/`, "");

This change removes the leading slash, resulting in a relative path that matches the file system structure.

denops/aider/buffer.ts (1)

223-229: Update documentation to reflect the new return type of identifyAiderBuffer

The identifyAiderBuffer function now returns a Promise<{ job_id: number; winnr: number; bufnr: number } | undefined> instead of using a callback. Consider updating the JSDoc @returns annotation to accurately reflect this change.

Apply this diff to update the documentation:

/**
 * 開いているウィンドウの中からAiderバッファを識別し、そのジョブID、ウィンドウ番号、バッファ番号を返します。
 *
- * @returns {Promise<{ job_id: number, winnr: number, bufnr: number }>}
+ * @returns {Promise<{ job_id: number; winnr: number; bufnr: number } | undefined>}
 */
denops/aider/aiderCommand.ts (1)

39-43: Inconsistent documentation language

The function documentation for sendPrompt mixes Japanese and English. For consistency and readability, consider using a single language for all comments.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 5be4906 and f258b59.

📒 Files selected for processing (4)
  • denops/aider/aiderCommand.ts (2 hunks)
  • denops/aider/buffer.ts (9 hunks)
  • denops/aider/main.ts (6 hunks)
  • tests/aider_test.ts (1 hunks)
🔇 Additional comments (13)
tests/aider_test.ts (2)

Line range hint 1-8: Approve file renaming to align with testing framework.

The renaming of the test file to aider_test.ts is a positive change that ensures the file is correctly recognized by the testing framework. This change improves the project's adherence to testing conventions and should help in automating test discovery and execution.


5-5: Verify NeoVim-specific functionality and update test if necessary.

The test case has been updated to focus on NeoVim instead of Vim. While this change aligns the test name and description with the project's apparent shift towards NeoVim, there are a few points to consider:

  1. Ensure that this change is intentional and aligns with the project's goals. If the project is meant to support both Vim and NeoVim, consider keeping tests for both or clarifying the scope in the project documentation.

  2. The test functionality (getCurrentFilePath) remains unchanged. Verify if this function behaves identically in NeoVim and Vim environments. If there are NeoVim-specific features or behaviors that should be tested, consider updating the test accordingly.

  3. If this change represents a broader shift in the project's focus, ensure that other parts of the codebase and documentation reflect this change to maintain consistency.

To ensure the change is consistent across the project, run the following script:

This script will help identify any inconsistencies in the project's references to Vim or NeoVim, allowing you to update them accordingly.

denops/aider/main.ts (8)

2-2: Importing function utilities from denops_std

The import of the fn module from denops_std provides essential Vim function utilities needed throughout the script.


5-5: Importing utility functions from utils.ts

Importing getAiderBufferNr and getCurrentFilePath from ./utils.ts is appropriate and allows reuse of utility functions within the main script.


67-67: Updated sendPrompt command implementation

The sendPrompt command now uses buffer.sendPromptByBuffer, which aligns with the new implementation that handles input as a string. This change ensures the prompt is sent correctly based on the open buffer type.


81-81: Utilizing buffer.sendPromptWithInput in addFile command

The addFile command correctly uses buffer.sendPromptWithInput to send the /add prompt with the specified file path. This change simplifies the command handling by directly sending the prompt with user input.


88-99: Direct implementation of addCurrentFile command

The addCurrentFile command now includes its implementation directly within the command function. The logic correctly:

  • Retrieves the current buffer number.
  • Checks if the Aider buffer exists; if not, it runs aiderCommand.silentRun(denops).
  • Verifies that the current buffer is not a terminal buffer to prevent unintended behavior.
  • Retrieves the current file path.
  • Sends the /add prompt with the current file.

This refactoring enhances code clarity by localizing command-specific logic.


107-107: Using buffer.sendPromptWithInput in addWeb command

The addWeb command appropriately uses buffer.sendPromptWithInput to send the /web prompt with the provided URL. This aligns with the updated approach of handling commands directly.


116-116: Using buffer.sendPromptWithInput in ask command

The ask command correctly utilizes buffer.sendPromptWithInput to send the /ask prompt with the user's question. This change streamlines the command execution process.


175-175: Using buffer.sendPromptWithInput in test command

The test command properly uses buffer.sendPromptWithInput to send the /test prompt with the specified command. This aligns with the standardization of command implementations across the codebase.

denops/aider/buffer.ts (1)

88-88: Verify all calls to sendPromptWithInput include the new input parameter

The sendPromptWithInput function signature now includes an input parameter. Ensure that all calls to this function throughout the codebase have been updated to include this parameter to prevent potential runtime errors.

Run the following script to identify any outdated calls:

denops/aider/aiderCommand.ts (2)

1-4: LGTM

The updated import statements are correct and use the latest versions.


56-58: LGTM

The exit function correctly sends the exit command and deletes the associated buffer.

Comment on lines +134 to +143
await command("openIgnore", "0", async () => {
const gitRoot = (await fn.system(denops, "git rev-parse --show-toplevel"))
.trim();
const filePathToOpen = `${gitRoot}/.aiderignore`;
if (await fn.filereadable(denops, filePathToOpen)) {
await denops.cmd(`edit ${filePathToOpen}`);
return;
}
console.log(".aiderignoreファイルが見つかりません。");
}),
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Inconsistent language in log message

The log message on line 142 is in Japanese:

console.log(".aiderignoreファイルが見つかりません。");

For consistency and to accommodate all users, consider translating this message to English to match the rest of the codebase.

Apply this diff to update the log message:

-          console.log(".aiderignoreファイルが見つかりません。");
+          console.log(".aiderignore file not found.");

Comment on lines +147 to +163
async () => {
{
const currentFile = await getCurrentFilePath(denops);

const gitRoot =
(await fn.system(denops, "git rev-parse --show-toplevel"))
.trim();
const filePathToOpen = `${gitRoot}/.aiderignore`;
const forAiderIgnorePath = currentFile.replace(gitRoot, "");

const file = await fn.readfile(denops, filePathToOpen);
file.push(`!${forAiderIgnorePath}`);

await fn.writefile(denops, file, filePathToOpen);
console.log(`Added ${currentFile} to .aiderignore`);
}
},
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add error handling for missing .aiderignore file

In the addIgnoreCurrentFile command, there is no check to verify if the .aiderignore file exists before attempting to read it with fn.readfile. If the file does not exist, this could result in an error. Consider adding a check to ensure the file exists, and create it if necessary.

Apply this diff to add error handling:

+              if (!(await fn.filereadable(denops, filePathToOpen))) {
+                await fn.writefile(denops, [], filePathToOpen);
+              }
               const file = await fn.readfile(denops, filePathToOpen);

This ensures that the .aiderignore file exists before reading and appending to it.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
async () => {
{
const currentFile = await getCurrentFilePath(denops);
const gitRoot =
(await fn.system(denops, "git rev-parse --show-toplevel"))
.trim();
const filePathToOpen = `${gitRoot}/.aiderignore`;
const forAiderIgnorePath = currentFile.replace(gitRoot, "");
const file = await fn.readfile(denops, filePathToOpen);
file.push(`!${forAiderIgnorePath}`);
await fn.writefile(denops, file, filePathToOpen);
console.log(`Added ${currentFile} to .aiderignore`);
}
},
async () => {
{
const currentFile = await getCurrentFilePath(denops);
const gitRoot =
(await fn.system(denops, "git rev-parse --show-toplevel"))
.trim();
const filePathToOpen = `${gitRoot}/.aiderignore`;
const forAiderIgnorePath = currentFile.replace(gitRoot, "");
if (!(await fn.filereadable(denops, filePathToOpen))) {
await fn.writefile(denops, [], filePathToOpen);
}
const file = await fn.readfile(denops, filePathToOpen);
file.push(`!${forAiderIgnorePath}`);
await fn.writefile(denops, file, filePathToOpen);
console.log(`Added ${currentFile} to .aiderignore`);
}
},

Comment on lines +317 to +346
async function sendPromptFromSplitWindow(
denops: Denops,
prompt: string,
): Promise<void> {
const aiderBuffer = await identifyAiderBuffer(denops);
if (aiderBuffer === undefined) {
return;
}
const { job_id, winnr } = aiderBuffer;

for (let winnr = 1; winnr <= totalWindows; winnr++) {
const bufnr = await denops.call("winbufnr", winnr);
if (await v.g.get(denops, "aider_buffer_open_type") !== "floating") {
await denops.cmd(`${winnr}wincmd w`);
} else {
const totalWindows = ensure<number>(
await denops.call("winnr", "$"),
is.Number,
);

const buftype = await denops.call("getbufvar", bufnr, "&buftype");
for (let winnr = 1; winnr <= totalWindows; winnr++) {
const bufnr = await denops.call("winbufnr", winnr);

if (buftype === "terminal") {
await denops.cmd(`${winnr}wincmd w`);
break;
}
const buftype = await denops.call("getbufvar", bufnr, "&buftype");

if (buftype === "terminal") {
await denops.cmd(`${winnr}wincmd w`);
break;
}
}
await feedkeys(denops, "G");
await feedkeys(denops, '"qp');
await denops.call("chansend", job_id, "\n");
await denops.cmd("wincmd p");
});
}
await aiderCommand.sendPrompt(denops, job_id, prompt);
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Review logic for handling buffer types in sendPromptFromSplitWindow

In the sendPromptFromSplitWindow function, when aider_buffer_open_type is "floating", the code iterates through all windows to find a terminal buffer. This may be counterintuitive since a floating buffer type typically wouldn't require switching windows. Consider reviewing the condition to ensure the logic aligns with the intended behavior for different buffer types.

Comment on lines +39 to +44
const buffer = await identifyAiderBuffer(denops);
if (buffer === undefined) {
return;
}
const { job_id, bufnr } = buffer;
aiderCommand.exit(denops, job_id, bufnr);
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Add user feedback when no Aider buffer is found

In the exitAiderBuffer function, if identifyAiderBuffer returns undefined, the function silently returns without notifying the user. Consider informing the user that no Aider buffer is currently open to improve usability and debugging.

Apply this diff to provide user feedback:

if (buffer === undefined) {
+  await denops.cmd("echo 'No Aider buffer is currently open.'");
   return;
}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const buffer = await identifyAiderBuffer(denops);
if (buffer === undefined) {
return;
}
const { job_id, bufnr } = buffer;
aiderCommand.exit(denops, job_id, bufnr);
const buffer = await identifyAiderBuffer(denops);
if (buffer === undefined) {
await denops.cmd("echo 'No Aider buffer is currently open.'");
return;
}
const { job_id, bufnr } = buffer;
aiderCommand.exit(denops, job_id, bufnr);

Comment on lines +106 to +121
async sendPromptByBuffer(
denops: Denops,
openBufferType: BufferLayout,
): Promise<void> {
// テキストを取得してプロンプト入力ウインドウを閉じる
await feedkeys(denops, 'ggVG"qy');
const bufferContent = ensure(
await denops.call("getbufline", "%", 1, "$"),
is.ArrayOf(is.String),
).join("\n");

await denops.cmd("bdelete!");

openBufferType === "floating"
? await sendPromptFromFloatingWindow(denops)
: await sendPromptFromSplitWindow(denops);
if (openBufferType === "floating") {
await sendPromptFromFloatingWindow(denops, bufferContent);
} else {
await sendPromptFromSplitWindow(denops, bufferContent);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Outdated References to sendPrompt Found

The following references to sendPrompt still exist and need to be updated to sendPromptByBuffer:

  • denops/aider/aiderCommand.ts: async sendPrompt(
  • denops/aider/buffer.ts:
    • await aiderCommand.sendPrompt(denops, jobId, prompt);
    • await aiderCommand.sendPrompt(denops, job_id, prompt);
🔗 Analysis chain

Ensure all references to sendPrompt are updated to sendPromptByBuffer

The method sendPrompt has been renamed to sendPromptByBuffer. Please verify that all references to the old method name have been updated to prevent undefined method errors.

Use this script to find any outdated references:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find any references to the old method name `sendPrompt`

# Expected Result: No occurrences of `sendPrompt` except in `sendPromptByBuffer`.

rg --type ts 'sendPrompt\('

Length of output: 237

denops/aider/aiderCommand.ts Show resolved Hide resolved
},
async sendPrompt(
async sendPromptByBuffer(
Copy link
Contributor Author

Choose a reason for hiding this comment

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

実装内容に合わせて微妙にリネーム

const prompt = `/add ${currentFile}`;
async sendPrompt(
denops: Denops,
jobId: number,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

テストの実装方針によってはaiderBufferのjobIdを取るところまでaiderCommandモジュールの責務にした方がいいかもしれないがどっちが正しいかは微妙なところ

@@ -316,31 +314,34 @@ async function sendPromptFromFloatingWindow(denops: Denops): Promise<void> {
*
* @param {Denops} denops - Denopsインスタンス
*/
async function sendPromptFromSplitWindow(denops: Denops): Promise<void> {
await identifyAiderBuffer(denops, async (job_id, winnr, _bufnr) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

このへんから見た目複雑に差分が出てしまっているけれどidentifyAiderBufferとsendPromptのインターフェースが変わった部分以外は変えてないはず

Copy link
Owner

@nekowasabi nekowasabi left a comment

Choose a reason for hiding this comment

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

( ;´ワ `;)つLGTM☆

@@ -1,32 +1,13 @@
import { Denops } from "https://deno.land/x/denops_std@v5.0.1/mod.ts";
import { Denops } from "https://deno.land/x/denops_std@v6.4.0/mod.ts";
Copy link
Owner

Choose a reason for hiding this comment

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

( ;´ワ `;)ヘーキヘーキ


await emit(denops, "User", "AiderOpen");
return;
},

async sendPromptWithInput(denops: Denops): Promise<void> {
async sendPromptWithInput(denops: Denops, input: string): Promise<void> {
Copy link
Owner

Choose a reason for hiding this comment

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

テストしやすさを考えると、確かにinputを引数にするほうがよさそう(当時はテストを1ミリも考えていなかった顔

denops: Denops,
openBufferType: BufferLayout,
): Promise<void> {
// テキストを取得してプロンプト入力ウインドウを閉じる
await feedkeys(denops, 'ggVG"qy');
const bufferContent = ensure(
Copy link
Owner

Choose a reason for hiding this comment

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

普通にこれでいいですね…(当時は覚えたてのfeedkeysを使いまくっていた記憶

Copy link
Contributor Author

@tsukimizake tsukimizake Oct 1, 2024

Choose a reason for hiding this comment

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

https://zenn.dev/uga_rosa/articles/200ad8013db7a8 feedkeysは非同期処理らしいので現状の使用箇所は処理落ち時とかにバグってる可能性ありそう ( ;´。 `;)

@@ -215,19 +220,13 @@ export const buffer = {
};

/**
* 開いているウィンドウの中からターミナルバッファを識別し、そのジョブID、ウィンドウ番号、バッファ番号をコールバック関数に渡します
* 開いているウィンドウの中からAiderバッファを識別し、そのジョブID、ウィンドウ番号、バッファ番号を返します
Copy link
Owner

Choose a reason for hiding this comment

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

当時は若く、覚えたてのコールバックを以下略

Copy link
Contributor Author

@tsukimizake tsukimizake Oct 1, 2024

Choose a reason for hiding this comment

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

コールバック、async/awaitとかの非同期処理をいい感じに書く機能がない言語で非同期処理やる場合に仕方なく使うものだとおもてる
あとはサーバーとかを挟んでいてその手の機能がうまく使えない場合

@nekowasabi nekowasabi merged commit 5243c09 into nekowasabi:main Sep 30, 2024
1 check passed
@tsukimizake tsukimizake deleted the refactor branch October 1, 2024 03:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants