run formatter

This commit is contained in:
evanpelle
2026-05-06 21:08:42 -06:00
parent 922e03d5fb
commit e960b5130a
6 changed files with 46 additions and 26 deletions
+1
View File
@@ -101,6 +101,7 @@ All new features and bug fixes should include relevant tests. We use **Vitest**.
## Submitting a Pull Request
1. **Commit your changes**:
- Write clear, concise commit messages.
- Use the present tense ("Add feature" not "Added feature").
+4
View File
@@ -181,6 +181,7 @@ Feel free to ask questions in the translation Discord server!
To ensure code quality and project stability, we use a progressive contribution system:
1. **New Contributors**: Limited to UI improvements and small bug fixes only
- This helps you become familiar with the codebase
- UI changes are easier to review and less likely to break core functionality
- Small, focused PRs have a higher chance of being accepted
@@ -192,17 +193,20 @@ To ensure code quality and project stability, we use a progressive contribution
### How to Contribute Successfully
1. **Before Starting Work**:
- Open an issue describing what you want to contribute
- Wait for maintainer feedback before investing significant time
- Small improvements can proceed directly to PR stage
2. **Code Quality Requirements**:
- All code must be well-commented and follow existing style patterns
- New features should not break existing functionality
- Code should be thoroughly tested before submission
- All code changes in src/core _MUST_ be tested.
3. **Pull Request Process**:
- Keep PRs focused on a single feature or bug fix
- Include screenshots for UI changes
- Describe what testing you've performed
+3 -1
View File
@@ -11,7 +11,9 @@ export interface ParabolaOptions {
const PARABOLA_MIN_HEIGHT = 50;
export class ParabolaUniversalPathFinder implements SteppingPathFinder<TileRef> {
export class ParabolaUniversalPathFinder
implements SteppingPathFinder<TileRef>
{
private curve: DistanceBasedBezierCurve | null = null;
private lastTo: TileRef | null = null;
+2 -1
View File
@@ -121,7 +121,8 @@ export interface AttackClusteredPositionsMessage extends BaseWorkerMessage {
attackID?: string;
}
export interface AttackClusteredPositionsResultMessage extends BaseWorkerMessage {
export interface AttackClusteredPositionsResultMessage
extends BaseWorkerMessage {
type: "attack_clustered_positions_result";
attacks: { id: string; positions: { x: number; y: number }[] }[];
}
+33 -22
View File
@@ -53,8 +53,9 @@ describe("ClanModal — handlers", () => {
describe("handleApprove increments selectedClan.memberCount", () => {
it("increments memberCount by 1 after successful approveClanRequest", async () => {
const { approveClanRequest, fetchClanRequests } =
await import("../../../src/client/ClanApi");
const { approveClanRequest, fetchClanRequests } = await import(
"../../../src/client/ClanApi"
);
(approveClanRequest as ReturnType<typeof vi.fn>).mockResolvedValue(true);
(fetchClanRequests as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
results: [
@@ -89,8 +90,9 @@ describe("ClanModal — handlers", () => {
});
it("does not increment memberCount when approveClanRequest fails", async () => {
const { approveClanRequest, fetchClanRequests } =
await import("../../../src/client/ClanApi");
const { approveClanRequest, fetchClanRequests } = await import(
"../../../src/client/ClanApi"
);
(approveClanRequest as ReturnType<typeof vi.fn>).mockResolvedValue({
error: "clan_modal.error_generic",
});
@@ -123,8 +125,9 @@ describe("ClanModal — handlers", () => {
});
it("treats undefined memberCount as 0 and increments to 1", async () => {
const { approveClanRequest, fetchClanRequests } =
await import("../../../src/client/ClanApi");
const { approveClanRequest, fetchClanRequests } = await import(
"../../../src/client/ClanApi"
);
(approveClanRequest as ReturnType<typeof vi.fn>).mockResolvedValue(true);
(fetchClanRequests as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
results: [
@@ -268,8 +271,9 @@ describe("ClanModal — handlers", () => {
});
it("handleBan syncs memberCount via clan-updated event on success", async () => {
const { banClanMember, fetchClanMembers } =
await import("../../../src/client/ClanApi");
const { banClanMember, fetchClanMembers } = await import(
"../../../src/client/ClanApi"
);
(banClanMember as ReturnType<typeof vi.fn>).mockResolvedValue(true);
// Server returns the post-ban member total (was 5, now 4).
(fetchClanMembers as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
@@ -306,8 +310,9 @@ describe("ClanModal — handlers", () => {
describe("handleUnban", () => {
it("removes ban from list and decrements total on success", async () => {
const { unbanClanMember, fetchClanBans } =
await import("../../../src/client/ClanApi");
const { unbanClanMember, fetchClanBans } = await import(
"../../../src/client/ClanApi"
);
(unbanClanMember as ReturnType<typeof vi.fn>).mockResolvedValue(true);
(fetchClanBans as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
results: [
@@ -372,8 +377,9 @@ describe("ClanModal — handlers", () => {
});
it("calls kickMember and syncs memberCount on success", async () => {
const { kickMember, fetchClanMembers } =
await import("../../../src/client/ClanApi");
const { kickMember, fetchClanMembers } = await import(
"../../../src/client/ClanApi"
);
(kickMember as ReturnType<typeof vi.fn>).mockResolvedValue(true);
(fetchClanMembers as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
results: [],
@@ -405,8 +411,9 @@ describe("ClanModal — handlers", () => {
});
it("does not mutate state when kickMember fails", async () => {
const { kickMember, fetchClanMembers } =
await import("../../../src/client/ClanApi");
const { kickMember, fetchClanMembers } = await import(
"../../../src/client/ClanApi"
);
(kickMember as ReturnType<typeof vi.fn>).mockResolvedValue({
error: "clan_modal.error_generic",
});
@@ -593,8 +600,9 @@ describe("ClanModal — handlers", () => {
describe("handleJoin", () => {
beforeEach(async () => {
const { fetchClanDetail, fetchClanStats } =
await import("../../../src/client/ClanApi");
const { fetchClanDetail, fetchClanStats } = await import(
"../../../src/client/ClanApi"
);
(fetchClanDetail as ReturnType<typeof vi.fn>).mockResolvedValueOnce(
makeClan({ isOpen: true, memberCount: 5 }),
);
@@ -607,8 +615,9 @@ describe("ClanModal — handlers", () => {
});
it("switches detail view into member mode immediately after open-clan join", async () => {
const { joinClan, fetchClanMembers } =
await import("../../../src/client/ClanApi");
const { joinClan, fetchClanMembers } = await import(
"../../../src/client/ClanApi"
);
(joinClan as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
status: "joined",
});
@@ -772,8 +781,9 @@ describe("ClanModal — handlers", () => {
});
it("clears confirmAction and removes the dialog after confirming", async () => {
const { transferLeadership } =
await import("../../../src/client/ClanApi");
const { transferLeadership } = await import(
"../../../src/client/ClanApi"
);
(transferLeadership as ReturnType<typeof vi.fn>).mockResolvedValue(true);
const dialog = modal.querySelector("confirm-dialog");
@@ -792,8 +802,9 @@ describe("ClanModal — handlers", () => {
});
it("clears confirmAction when cancel is clicked, without calling the API", async () => {
const { transferLeadership } =
await import("../../../src/client/ClanApi");
const { transferLeadership } = await import(
"../../../src/client/ClanApi"
);
const dialog = modal.querySelector("confirm-dialog");
expect(dialog).toBeTruthy();
@@ -241,8 +241,9 @@ describe("ClanModal — rendering", () => {
});
it("shows 0 in the stats row of the detail view when memberCount is undefined", async () => {
const { fetchClanDetail, fetchClanStats } =
await import("../../../src/client/ClanApi");
const { fetchClanDetail, fetchClanStats } = await import(
"../../../src/client/ClanApi"
);
(fetchClanDetail as ReturnType<typeof vi.fn>).mockResolvedValueOnce(
makeClan({ memberCount: undefined }),
);