Skip to content

Instantly share code, notes, and snippets.

View zainab-ali's full-sized avatar

Zainab Ali zainab-ali

View GitHub Profile
@zainab-ali
zainab-ali / RenameExpectToExpectSame.scala
Created June 25, 2025 11:01
weaver: replace `expect(.. == ..)` with `expect.same`
package fix
import scalafix.v1._
import scala.meta._
class RenameExpectToExpectSame extends SemanticRule("RenameExpectToExpectSame") {
override def fix(implicit doc: SemanticDocument): Patch = {
val expectMethod =
SymbolMatcher.normalized("weaver/Expectations.Helpers#expect.")
doc.tree.collect {
@zainab-ali
zainab-ali / MeteredParEvalMapUnbounded.scala
Created June 23, 2025 17:04
aquascape: metered & parEvalMapUnorderedUnbounded
//> using scala "3.7.0"
//> using dep "com.github.zainab-ali::aquascape::0.4.0"
import fs2.*
import cats.effect.*
import aquascape.*
import aquascape.drawing.*
import scala.concurrent.duration.*
object MeteredParEvalMapUnbounded extends AquascapeApp {
@zainab-ali
zainab-ali / lsug-talks-thank-you.sc
Created June 19, 2025 22:18
London Scala User Group Talks Thank-you Template
//> using dep tech.neander::cue4s::latest.release
import cue4s.*
case class Attributes(
@cue(_.text("Intro slides"))
introSlides: String,
@cue(_.text("Venue"))
venue: String,
@zainab-ali
zainab-ali / pizza-calculator.scala
Last active April 17, 2025 15:58
London Scala User Group Pizza Calculator
/** This app calculates the number of pizzas needed for each
* London Scala event.
*
* Meat, vegetarian and vegan pizzas are all a Dominos Large
* size. Gluten-free pizzas come in a single small size.
*
* You can run this locally with:
*
* > scala https://gist.github.com/zainab-ali/231e3ded6e8241d11e3927f9521bc0cc -- <numberOfSignupsOnMeetupDotCom>
*
@zainab-ali
zainab-ali / evalTapThenparEvalMapUnordered.scala
Created October 15, 2024 15:00
Aquascape describing `evalTap` followed by `parEvalMapUnordered`.
//> using scala "3.5.0"
//> using dep "com.github.zainab-ali::aquascape::0.3.0"
import fs2.*
import cats.effect.*
import aquascape.*
import cats.syntax.all.*
import scala.concurrent.duration.*
object App extends AquascapeApp {
@zainab-ali
zainab-ali / parEvalMapUnorderedChunks.scala
Last active October 15, 2024 15:19
Aquascape describing `parEvalMapUnordered` and chunk preservation semantics.
//> using dep "com.github.zainab-ali::aquascape::0.3.0"
import fs2.*
import cats.effect.*
import aquascape.*
import cats.syntax.all.*
object App extends AquascapeApp {
def name: String = "aquascape"
@zainab-ali
zainab-ali / repr-bug.sc
Created October 9, 2024 14:37
Reproduction of bug in Repr derivation in snapshot4s
//> using scala "3.5.0"
//> using dep com.siriusxm::snapshot4s-core::0.1.6
import snapshot4s.Repr
class Address()
given Repr[Address] = ???
case class Person(name: String, address: Address)
val person = Person("Mao", new Address())
//> using javaOpt -Xmx200m
//> using scala "3.4.0"
//> using test.dep com.disneystreaming::weaver-cats::0.8.4
package repro
import cats.effect.IO
import scala.concurrent.duration._
import weaver.SimpleMutableIOSuite
object Repro extends SimpleMutableIOSuite {
@zainab-ali
zainab-ali / workshop-test.scala
Created March 16, 2024 17:57
scala-cli script to test that aquascapes are generated properly
//> using scala "3.4.0"
//> using lib "com.github.zainab-ali::aquascape:0.1.0"
import fs2.*
import cats.effect.*
import aquascape.*
object BasicScape extends AquascapeApp.Simple {
def stream(using Scape[IO]) = {
Stream(1, 2, 3)
.stage("Source")
//> using scala "3.4.0"
//> using lib "co.fs2::fs2-core:3.9.4"
import fs2.*
import cats.syntax.all.*
import cats.effect.*
object Demo extends IOApp.Simple {
def combineResources[O, O2](f: Chunk[O] => Resource[IO, O2])(
in: Stream[IO, Chunk[O]]