Open6
usagi-ts

usagi-tsの目的
coderabbitの設定をtypescriptで管理するためのツール
型安全、設定をモジュール管理できるようにしたい
設定を動的に変更できるようにしたい

usagi.config.tsで設定をできるようにする。以下サンプル
import { defineUsagiConfig } from 'usagi-ts';
export default defineUsagiConfig([
// Base configuration
{
language: 'en-US',
reviews: {
profile: 'chill',
auto_review: {
enabled: true,
},
},
},
{
instruction_sets: {
typescript: {
description: 'Standard Typescript review instructions',
instructions: (params: { constantsStyle: string }): string => `
Review JavaScript code against these standards:
1. Use the "function" keyword for functions. "Arrow functions" are prohibited.
2. When defining types in TypeScript, utilize "type" aliases instead of "interface".
3. Constants should be named using ${params.constantsStyle || 'UpperCamel'}.
`
}
}
},
]);

ESLintのflat configライクにしたい
import { defineUsagiConfig } from 'usagi-ts';
// Import shared configuration modules directly
import baseConfig from './configs/base-config';
import jsConfig from '@my-org/usagi-js-config';
export default defineUsagiConfig([
// Configurations are merged in order (earlier configs have higher precedence)
baseConfig, // Base organization configuration
jsConfig, // JavaScript-specific configuration
// Inline configuration objects
{
reviews: {
profile: 'assertive', // Override settings from imported configs
auto_review: {
drafts: true
}
}
}
]);

ユーザーがpresetを設定できるようにする。またパラメータをセットできるようにする
// configs/base-config.ts
import { UsagiExtendedConfig } from 'usagi-ts';
/**
* Base organization configuration
* @type {UsagiExtendedConfig}
*/
const baseConfig: UsagiExtendedConfig = {
language: 'en-US',
reviews: {
profile: 'chill',
auto_review: {
enabled: true,
},
},
// Shared instruction sets
instruction_sets: {
typescript: {
description: 'Standard Typescript review instructions',
instructions: (params: { constantsStyle: string }): string => `
Review JavaScript code against these standards:
1. Use the "function" keyword for functions. "Arrow functions" are prohibited.
2. When defining types in TypeScript, utilize "type" aliases instead of "interface".
3. Constants should be named using ${params.constantsStyle || 'UpperCamel'}.
`
}
}
};
export default baseConfig;

instructionsを設定できるようにする
import { defineUsagiConfig } from 'usagi-ts';
import baseConfig from './configs/base-config';
import { createJavaScriptInstructions } from './configs/instruction-functions';
export default defineUsagiConfig([
baseConfig,
{
instructions: [
{
path: ["src/**/*.ts", "src/**/*.tsx"],
instructions: {
use: "typescript",
with: {
constantsStyle: "UPPER_SNAKE_CASE"
}
}
}
]
}
]);

Cursorのルールを出力できると嬉しい