PluginBench
Rule

scala kafka

via PatrickJS/awesome-cursorrules

Scala and Kafka development practices with clean code, functional patterns, and testing guidelines.

What is scala kafka?

This rule provides comprehensive development standards for Scala projects using Kafka, covering functional programming principles, naming conventions, error handling, testing strategies, and Kafka-specific patterns. Use it to maintain code quality, consistency, and safety across Scala/Kafka applications.

  • Enforce functional programming practices: immutability, pure functions, and explicit side-effect handling
  • Establish naming conventions (UpperCamelCase classes, lowerCamelCase methods, SCREAMING_SNAKE_CASE constants) and code organization standards
  • Require exhaustive pattern matching, Option/Either for nullability, and sealed traits for algebraic data types
  • Mandate Kafka-specific patterns: externalized topic configuration, format/codec libraries, and TopologyTestDriver unit tests plus integration tests
  • Enforce scalafmt formatting with 100-column max and treat violations as build errors
  • Promote error handling via Try/Either, SLF4J logging, and resource management with scala.util.Using or cats-effect Resource

Applies to

File patterns this rule matches.

**/*
Rule definition (reference)

Source of truth, from the repository.

general-scala-clean-code.mdc

  • Declare vals/vars as close as possible to first use.
  • Name length should be proportional to scope: 1-2 chars allowed only inside small lambdas.
  • Avoid nested for-comprehensions deeper than two levels; factor out steps into helpers.
  • Split a single source file by responsibility.
  • Use tail-rec optimisation (@tailrec) where appropriate.
  • Prefer immutable collections and avoid mutation during iteration.
  • When interop with Java forces mutability, wrap it in a pure facade with the use of .asScala, to retain functional API.
  • When something is nullable, wrap it into an Option, to retain functional API.
  • Keep cyclomatic complexity below 10 for any method; IDE inspections should warn.

general-scala-development-practices.mdc

========== GENERAL PRINCIPLES ==========

  • You are an experienced Senior Scala Developer.
  • You always adhere to SOLID, DRY, KISS and YAGNI principles.
  • Prefer pure functions; minimise side-effects. Where effects are required, make them explicit (e.g. using scala.util.Try, Either, or cats-effect IO/Task if adopted).
  • Use val over var; collections must be immutable unless mutability is proven cheaper & safe.
  • Replace null with Option, Either or a domain-specific ADT.
  • Use pattern matching exhaustively and handle the default case only when truly open-ended.
  • Prefer for-comprehensions, map/flatMap/fold, and higher-order functions over imperative loops.
  • Prefer case classes and sealed traits for algebraic data types.
  • Extract common logic into private or package-private helpers; avoid long methods (> 30 LOC).
  • Prefer extension methods or type classes over inheritance when adding behaviour.
  • Keep public APIs small, surface only what the module owns.
  • Break every task into the smallest composable pure functions before wiring them together.

========== NAMING & SYNTAX ==========

  • Class / object / trait names are UpperCamelCase nouns (e.g. NotificationStreamApp).
  • Methods & vals are lowerCamelCase verbs or nouns (e.g. process, serde, productKey).
  • Constants use SCREAMING_SNAKE_CASE.
  • Similar to Java’s static final members, if the member is final, immutable and it belongs to a package object or an object, it may be considered a constant.
  • Symbolic names (|>) are allowed only when they align with widespread FP idioms.
  • Match expressions use match/case over nested if/else chains; for simple two-branch logic prefer if … then … else … expressions.

========== ERROR HANDLING & LOGGING ==========

  • Catch the most specific Exception first; convert checked Java exceptions to an ADT or Try.
  • No empty catch blocks; log at debug or error level with a meaningful message.
  • Leverage scala.util.Using (or cats-effect Resource) for auto-closing resources.
  • Avoid “defensive” logging or println; use SLF4J (Logback) with the scala-logging wrapper.

========== TESTING ==========

  • Use ScalaTest in a Given-When-Then layout with the use of AnyFlatSpec.
  • Focus on critical paths and business invariants; do not over-test boilerplate.
  • Property-based tests (ScalaCheck) for pure functions with non-trivial invariants.
  • Set up integration tests as a subproject named “integration” and treat integration tests as standard tests

========== PERFORMANCE & SAFETY ==========

  • Avoid blocking calls inside Kafka stream processing; if unavoidable, off-load to a dedicated thread-pool.
  • Convert Java collections to Scala equivalents once at the boundary; never bounce back and forth.
  • Use underscore-separated digits for large numeric literals (e.g. val timeoutMs = 30_000).

========== MODERN SCALA 3 FEATURES ==========

  • Use Enums for finite alternatives instead of Java-style enums.
  • Embrace opaque types to avoid accidental misuse of primitive wrappers.
  • Use context parameters (using) for type-class evidence instead of classic implicit lists when convenient.
  • Prefer given/using syntax over implicit where supported.

========== CLEAN BUILD ==========

  • The sbt build uses scalafmt for formatting; treat any scalafmt violation as a build error.

kafka-development-practices.mdc

  • All topic names config values (Typesafe Config or pure-config).
  • Use Format or Codec from the JSON or AVRO or another library that is being used in the project.
  • Streams logic must be tested with TopologyTestDriver (unit-test) plus an integration test against local Kafka.

linting-formatting.mdc

  • scalafmt: Enforce Google-inspired scalafmt configuration with maxColumn = 100.

Related rules

Secure coding, secret handling, dependency hygiene, and compliance for DevSecOps and SSDLC.

["**/*.py" +8
41k
via PatrickJS/awesome-cursorrules

30+ chart types for React with AI-assisted generation, real-time streaming, and geographic visualization.

**/*
41k
via PatrickJS/awesome-cursorrules

Best practices for Shopify Liquid theme development with structured project organization, performance optimization, and accessibility.

["**/*.liquid" +5
41k
via PatrickJS/awesome-cursorrules

SQL-callable AI functions and hybrid vector+keyword search for RAG within Snowflake.

**/*
41k
via PatrickJS/awesome-cursorrules

Expert guidance for Snowflake SQL, data pipelines, semi-structured data, and cost optimization.

**/*
41k
via PatrickJS/awesome-cursorrules

Expert guidance for Snowpark Python and dbt with Snowflake adapter.

**/*
41k
via PatrickJS/awesome-cursorrules