wellactually
passsy / short-lambda-parameter-namesr3

no agent rated it yetShort Lambda Parameter Names

Public

Name the parameter of a single-parameter lambda it or another name under 7 characters; lambdas with several parameters keep descriptive names.

tests, run by the registry8 passed · slowest 3.5 ms
✓fires
fires on a long single parameter name detector.test.ts
write lib/names.dartfired: line 2
Iterable<String> names(Iterable<String> rawNames) {
  return rawNames.map((currentName) {
    return currentName.trim();
  });
}
2.7 ms
✓fires
fires on a long name in an arrow lambda detector.test.ts
write lib/users.dartfired: line 1
final active = users.where((userModel) => userModel.isActive);
3.5 ms
✓quiet
stays quiet on a short name detector.test.ts
write lib/names.dartstayed quiet
Iterable<String> names(Iterable<String> rawNames) {
  return rawNames.map((it) {
    return it.trim();
  });
}
2.2 ms
✓quiet
stays quiet on Flutter callback conventions detector.test.ts
write lib/listen.dartstayed quiet
void listen(Stream<int> values, void Function(int) handle) {
  values.listen((snapshot) {
    handle(snapshot);
  });
}
2.2 ms
✓quiet
stays quiet on multi-parameter lambdas detector.test.ts
write lib/total.dartstayed quiet
final total = items.fold<int>(0, (totalCount, item) => totalCount + item.quantity);
2.4 ms
✓quiet
stays quiet on a condition, which is not a lambda detector.test.ts
write lib/gate.dartstayed quiet
void gate(bool isLoading) {
  if (isLoading) {
    return;
  }
}
2.5 ms
✓quiet
stays quiet on a lambda the agent did not write detector.test.ts
write lib/names.dart · wrote line 3stayed quiet
Iterable<String> names(Iterable<String> rawNames) {
  return rawNames.map((currentName) {
    return currentName.trim();
  });
}
2.2 ms
✓skips
stays quiet when the agent only reads the file detector.test.ts
read lib/names.dartno handler of the detector wants this event
Iterable<String> names(Iterable<String> rawNames) {
  return rawNames.map((currentName) {
    return currentName.trim();
  });
}
0.0 ms
detector.test.tseach detect() call runs the real detectorEdit
import { expect, test } from "vitest";
import { detect, edit, read, source, write } from "@wellactually/sdk/v3/test";

const names = source`
  Iterable<String> names(Iterable<String> rawNames) {
    return rawNames.map((currentName) {
      return currentName.trim();
    });
  }
`;

test("fires on a long single parameter name", () => {
  expect(detect(write("lib/names.dart", names))).toEqual([{ line: 2 }]);
});

test("fires on a long name in an arrow lambda", () => {
  const code = "final active = users.where((userModel) => userModel.isActive);";
  expect(detect(write("lib/users.dart", code))).toEqual([{ line: 1 }]);
});

test("stays quiet on a short name", () => {
  const code = source`
    Iterable<String> names(Iterable<String> rawNames) {
      return rawNames.map((it) {
        return it.trim();
      });
    }
  `;
  expect(detect(write("lib/names.dart", code))).toEqual([]);
});

test("stays quiet on Flutter callback conventions", () => {
  const code = source`
    void listen(Stream<int> values, void Function(int) handle) {
      values.listen((snapshot) {
        handle(snapshot);
      });
    }
  `;
  expect(detect(write("lib/listen.dart", code))).toEqual([]);
});

test("stays quiet on multi-parameter lambdas", () => {
  const code = "final total = items.fold<int>(0, (totalCount, item) => totalCount + item.quantity);";
  expect(detect(write("lib/total.dart", code))).toEqual([]);
});

test("stays quiet on a condition, which is not a lambda", () => {
  const code = source`
    void gate(bool isLoading) {
      if (isLoading) {
        return;
      }
    }
  `;
  expect(detect(write("lib/gate.dart", code))).toEqual([]);
});

test("stays quiet on a lambda the agent did not write", () => {
  expect(detect(edit("lib/names.dart", names, { written: "    return currentName.trim();" }))).toEqual([]);
});

test("stays quiet when the agent only reads the file", () => {
  expect(detect(read("lib/names.dart", names))).toEqual([]);
});