https://kotlinlang.org logo
Join the conversationJoin Slack
Channels
100daysofcode
100daysofkotlin
100daysofkotlin-2021
advent-of-code
aem
ai
alexa
algeria
algolialibraries
amsterdam
android
android-architecture
android-databinding
android-studio
androidgithubprojects
androidthings
androidx
androidx-xprocessing
anime
anko
announcements
apollo-kotlin
appintro
arabic
argentina
arkenv
arksemdevteam
armenia
arrow
arrow-contributors
arrow-meta
ass
atlanta
atm17
atrium
austin
australia
austria
awesome-kotlin
ballast
bangladesh
barcelona
bayarea
bazel
beepiz-libraries
belgium
berlin
big-data
books
boston
brazil
brikk
budapest
build
build-tools
bulgaria
bydgoszcz
cambodia
canada
carrat
carrat-dev
carrat-feed
chicago
chile
china
chucker
cincinnati-user-group
cli
clikt
cloudfoundry
cn
cobalt
code-coverage
codeforces
codemash-precompiler
codereview
codingame
codingconventions
coimbatore
collaborations
colombia
colorado
communities
competitive-programming
competitivecoding
compiler
compose
compose-android
compose-desktop
compose-hiring
compose-ios
compose-mp
compose-ui-showcase
compose-wear
compose-web
connect-audit-events
corda
cork
coroutines
couchbase
coursera
croatia
cryptography
cscenter-course-2016
cucumber-bdd
cyprus
czech
dagger
data2viz
databinding
datascience
dckotlin
debugging
decompose
decouple
denmark
deprecated
detekt
detekt-hint
dev-core
dfw
docs-revamped
dokka
domain-driven-design
doodle
dsl
dublin
dutch
eap
eclipse
ecuador
edinburgh
education
effective-kotlin
effectivekotlin
emacs
embedded-kotlin
estatik
event21-community-content
events
exposed
failgood
fb-internal-demo
feed
firebase
flow
fluid-libraries
forkhandles
forum
fosdem
fp-in-kotlin
framework-elide
freenode
french
fritz2
fuchsia
functional
funktionale
gamedev
ge-kotlin
general-advice
georgia
geospatial
german-lang
getting-started
github-workflows-kt
glance
godot-kotlin
google-io
gradle
graphic
graphkool
graphql
graphql-kotlin
graviton-browser
greece
grpc
gsoc
gui
hackathons
hacktoberfest
hamburg
hamkrest
helios
helsinki
hexagon
hibernate
hikari-cp
hire-me
hiring
hongkong
hoplite
http4k
hungary
hyderabad
image-processing
india
indonesia
inkremental
intellij
intellij-plugins
intellij-tricks
internships
introduce-yourself
io
ios
iran
israel
istanbulcoders
italian
jackson-kotlin
jadx
japanese
jasync-sql
java-to-kotlin-refactoring
javadevelopers
javafx
javalin
javascript
jdbi
jhipster-kotlin
jobsworldwide
jpa
jshdq
juul-libraries
jvm-ir-backend-feedback
jxadapter
k2-early-adopters
kaal
kafka
kakao
kalasim
kapt
karachi
karg
karlsruhe
kash_shell
kaskade
kbuild
kdbc
kgen-doc-tools
kgraphql
kinta
klaxon
klock
kloudformation
kmdc
kmm-español
kmongo
knbt
knote
koalaql
koans
kobalt
kobweb
kodein
kodex
kohesive
koin
koin-dev
komapper
kondor-json
kong
kontent
kontributors
korau
korean
korge
korim
korio
korlibs
korte
kotest
kotest-contributors
kotless
kotlick
kotlin-asia
kotlin-beam
kotlin-by-example
kotlin-csv
kotlin-data-storage
kotlin-foundation
kotlin-fuel
kotlin-in-action
kotlin-inject
kotlin-latam
kotlin-logging
kotlin-multiplatform-contest
kotlin-mumbai
kotlin-native
kotlin-pakistan
kotlin-plugin
kotlin-pune
kotlin-roadmap
kotlin-samples
kotlin-sap
kotlin-serbia
kotlin-spark
kotlin-szeged
kotlin-website
kotlinacademy
kotlinbot
kotlinconf
kotlindl
kotlinforbeginners
kotlingforbeginners
kotlinlondon
kotlinmad
kotlinprogrammers
kotlinsu
kotlintest
kotlintest-devs
kotlintlv
kotlinultimatechallenge
kotlinx-datetime
kotlinx-files
kotlinx-html
kotrix
kotson
kovenant
kprompt
kraph
krawler
kroto-plus
ksp
ktcc
ktfmt
ktlint
ktor
ktp
kubed
kug-leads
kug-torino
kvision
kweb
lambdaworld_cadiz
lanark
language-evolution
language-proposals
latvia
leakcanary
leedskotlinusergroup
lets-have-fun
libgdx
libkgd
library-development
linkeddata
lithuania
london
losangeles
lottie
love
lychee
macedonia
machinelearningbawas
madrid
malaysia
mathematics
meetkotlin
memes
meta
metro-detroit
mexico
miami
micronaut
minnesota
minutest
mirror
mockk
moko
moldova
monsterpuzzle
montreal
moonbean
morocco
motionlayout
mpapt
mu
multiplatform
mumbai
munich
mvikotlin
mvrx
myndocs-oauth2-server
naming
navigation-architecture-component
nepal
new-mexico
new-zealand
newname
nigeria
nodejs
norway
npm-publish
nyc
oceania
ohio-kotlin-users
oldenburg
oolong
opensource
orbit-mvi
osgi
otpisani
package-search
pakistan
panamá
pattern-matching
pbandk
pdx
peru
philippines
phoenix
pinoy
pocketgitclient
polish
popkorn
portugal
practical-functional-programming
proguard
prozis-android-backup
pyhsikal
python
python-contributors
quasar
random
re
react
reaktive
realm
realworldkotlin
reductor
reduks
redux
redux-kotlin
refactoring-to-kotlin
reflect
refreshversions
reports
result
rethink
revolver
rhein-main
rocksdb
romania
room
rpi-pico
rsocket
russian
russian_feed
russian-kotlinasfirst
rx
rxjava
san-diego
science
scotland
scrcast
scrimage
script
scripting
seattle
serialization
server
sg-user-group
singapore
skia-wasm-interop-temp
skrape-it
slovak
snake
sofl-user-group
southafrica
spacemacs
spain
spanish
speaking
spek
spin
splitties
spotify-mobius
spring
spring-security
squarelibraries
stackoverflow
stacks
stayhungrystayfoolish
stdlib
stlouis
strife-discord-lib
strikt
students
stuttgart
sudan
swagger-gradle-codegen
swarm
sweden
swing
swiss-user-group
switzerland
talking-kotlin
tallinn
tampa
teamcity
tegal
tempe
tensorflow
terminal
test
testing
testtestest
texas
tgbotapi
thailand
tornadofx
touchlab-tools
training
tricity-kotlin-user-group
trójmiasto
truth
tunisia
turkey
turkiye
twitter-feed
uae
udacityindia
uk
ukrainian
uniflow
unkonf
uruguay
utah
uuid
vancouver
vankotlin
vertx
videos
vienna
vietnam
vim
vkug
vuejs
web-mpp
webassembly
webrtc
wimix_sentry
wwdc
zircon
Powered by Linen
ksp
  • e

    evant

    10/10/2020, 8:32 PM
    curious on thoughts of representing function types. Right now it seems like the are converted to their class references, so
    (Int) -> String
    has the type
    kotlin.Function1<Int, String>
    and
    suspend (Int) -> String
    has the type
    kotlin.coroutines.SuspendFunction1<Int, String>
    would it make sense to represent these more specially as function types? Or maybe have some helpers to detect if a type is a function type, what it's args/return type is, if it's suspend etc?
    t
    • 2
    • 1
  • e

    edrd

    10/11/2020, 10:20 PM
    Any special reason to have
    SymbolProcessor#init
    like annotation processor interfaces do? Having
    init
    and
    process
    in the same interface forces the declaration of `var`s to reference arguments from
    init
    for later usage in
    process
    . IMO a better approach would be a factory/provider interface:
    // ServiceLoader would load this instead
    interface SymbolProcessorFactory {
        // same args passed to init
        fun create(codeGenerator: CodeGenerator, ...): SymbolProcessor
    }
    
    interface SymbolProcessor {
        fun process(...)
        fun finish()
    }
    Although it would be a little more work to implement, there are some pretty concise ways of doing it:
    class Processor(private val codeGenerator: CodeGenerator) : SymbolProcessor {
        override fun process(...) { ... }
    
        object Factory : SymbolProcessorFactory {
            override fun create(codeGenerator: CodeGenerator, ...) = Processor(codeGenerator) 
        }
    }
    This would allow full immutability.
    👍 2
    z
    • 2
    • 6
  • s

    spierce7

    10/16/2020, 3:20 PM
    At the live event it seemed like they insinuated that KSP is ready for multiplatform use. Is it?
    j
    • 2
    • 1
  • s

    spierce7

    10/18/2020, 6:37 PM
    So I get that KSP is faster than annotation processors, but how much overhead do they add? They are incremental right?
    w
    j
    j
    • 4
    • 7
  • z

    Zac Sweers

    10/23/2020, 11:10 PM
    I know it’s a bit late, but I’m curious what you’d think of an alternative approach for that new API Right now it’s this
    fun asMemberOf(
        property: KSPropertyDeclaration,
        containing: KSType
    ): KSType
    Which feels a little java-y. What about this?
    fun KSPropertyDeclaration.asMemberOf(
        containing: KSType,
        resolver: Resolver
    ): KSType
    t
    y
    • 3
    • 4
  • g

    galex

    11/03/2020, 10:22 AM
    Hello, I wonder if KSP could help me show some function call as a compile time error, let me explain:
    enum class Value {
        Default, Value1, Value2
    }
    
    class SomeClass(val values: List<Value>) {
    
        fun hasValue1() = values.contains(Value.Value1)
        fun hasValue2() = values.contains(Value.Value2)
    }
    
    fun main() {
        val someClass = SomeClass(listOf(Value.Default, Value.Value1))
        someClass.hasValue2() // how to make this call compile time error?
    }
    As
    someClass
    does not contain
    Value.Value2
    in its
    values
    property, I would like to make a call to
    hasValue2
    a compile time error. Is it possible to do so?
    j
    • 2
    • 2
  • j

    Jiaxiang

    11/06/2020, 11:22 PM
    Hi, we just made a release at https://github.com/google/ksp/releases/tag/1.4.10-dev-experimental-20201106 Highlights • KSP is now in a separate task from the main kotlinCompile task, which allows you to run ksp alone. • Now you can generate class files to be included in kotlin compile. • Now you can write test in KSP repo for multiple module use cases, good for testing dependency related issue. (Credit to @yigit !) • As a prerequisites of KSP multiple round processing, we added a symbol validation API for validating types in a symbol’s enclosed scope. See 
    KSNode.validate()
     for more details.
    👍 8
    z
    e
    +2
    • 5
    • 24
  • t

    Ting-Yuan Huang

    11/10/2020, 6:51 PM
    Hi, here is a release which includes a fix to a dependency bug introduced in the release of 20201106. This release also includes an ABI change from another commit so processors using
    getSymbolsWithAnnotation
    will need to be rebuilt. https://github.com/google/ksp/releases/tag/1.4.10-dev-experimental-20201110
    🎉 3
    m
    j
    • 3
    • 4
  • z

    Zac Sweers

    11/11/2020, 1:16 AM
    I updated my bytecode generation branch, but it doesn't appear to be working. The classes themselves do get generated, but they don't link at compile-time
    • 1
    • 2
  • z

    Zac Sweers

    11/21/2020, 10:37 PM
    Is there anything I could do to help with the generated bytecode stuff? Alternatively @gavra might have some advice too as he looked into it for kapt in the past
    t
    • 2
    • 33
  • z

    Zac Sweers

    11/29/2020, 9:34 PM
    something I noticed in raw compiler code - functions and properties both implement a
    KtCallableDeclaration
    type to help share with code that can call a function or property. Thoughts on matching this with a
    KSCallableDeclaration
    ?
    j
    • 2
    • 7
  • z

    Zac Sweers

    11/30/2020, 4:18 AM
    Just to verify my thinking - ksp is "compatible" with incremental compilation now insofar as the separate KSP task is non-incremental but the regular kotlinCompile task that follows it doesn't know anything about KSP and thus runs incrementally as normal?
    t
    • 2
    • 2
  • z

    Zac Sweers

    11/30/2020, 4:21 AM
    And one last one - with ksp being a separate task now, is there any thought to possible allowing ksp mixing into an existing/standard project that otherwise uses standard kotlin? I'd like to look at using ksp in small isolated parts of our project, but last time I tried it seemed you either have to use KSP's fork for everything in the repo. Or if that's the goal anyway, any sense of allowing for that sooner than stable to help facilitate wider adoption/testing?
    t
    • 2
    • 5
  • z

    Zac Sweers

    11/30/2020, 4:32 AM
    I'm actually curious how ksp's separate task runs without the same overhead as the normal
    compileKotlin
    task. I imagine it maybe runs the frontend only (i.e. not the backend?), but I thought the frontend was also where the bulk of the slowdown was and being replaced with
    fir
    . On paper it seems like this is effectively running compilation twice like kapt does in its task, which presumable would work via similar mechanism
    t
    • 2
    • 2
  • p

    parth

    12/03/2020, 5:11 PM
    Hi KSP friends — I know it’s generally faux-pax to ask about product roadmaps (I have Chet Haase in my head, _“We don’t talk about the future_”), but I wanted to ask about the plan for KSP to graduate to alpha (or something less experimental) in 2021 (or beyond). I’m sure there’s blocking upstream compiler work that needs to land — are there tickets on Jetbrains’ side that I can follow to get a better sense of when KSP might have a chance of moving up the stability ladder?
    ➕ 2
    t
    t
    • 3
    • 5
  • z

    Zac Sweers

    12/06/2020, 12:59 AM
    Considering how far away KSP is from stable, does
    @KspExperimental
    make sense? I've kind of always only thought of experimental annotations being necessary for stable APIs, feels like unnecessary friction in something that is still being actively developed anyway
    t
    y
    • 3
    • 5
  • t

    Ting-Yuan Huang

    12/22/2020, 5:14 AM
    Hi, here is another release of KSP: https://github.com/google/ksp/releases/tag/1.4.20-dev-experimental-20201222 This release introduced an experimental incremental processing support, which can be enabled via the Gradle property 
    ksp.incremental=true
    . Logs can be enabled by 
    ksp.incremental.log=true
    . They are disabled by default so no worries :-) Incremental processing in KSP relies on processor's knowledge of how inputs are associated with outputs. Therefore, a new parameter is introduced to 
    CodeGenerator.createNewFile
    . There is also 
    CodeGenerator.associate
     to associate inputs and outputs, in case the relation isn't clear when creating the outputs. This is an API change that breaks existing code. Please see the API for details. Please give it a try and share your thoughts! We need your help to improve the API.
    🎉 6
    s
    z
    • 3
    • 5
  • z

    Zac Sweers

    12/24/2020, 12:40 AM
    is there any scenario where
    dependOnNewChanges
    would be false?
    t
    • 2
    • 43
  • z

    Zac Sweers

    12/24/2020, 2:05 AM
    one other question around incremental support -> should we de-dupe originating files in the processor or will KSP handle that?
    t
    • 2
    • 1
  • z

    Zac Sweers

    12/24/2020, 2:10 AM
    one more other question: how should classes defined via metadata (but not class hierarchy) work? Example case: I have a processor that generates an adapter for a sealed class and references all of its sealed subtypes. I've treated it as basically "isolating" up until now because we could get all the information from the original sealed class
    t
    • 2
    • 5
  • y

    yigit

    12/30/2020, 5:41 PM
    so Room is getting close to adding KSP support such that i was able run a compile time comparison between kapt and ksp (for room kotlin integration testapp). tl;dr; using KSP makes it ~50% faster 🙂 To my surprise, even the ksp task is faster than kapt's processing step (without stubs). This is not very scientific so i might be doing something wrong but these are very encouraging numbers
    script used:
    <https://android-review.googlesource.com/c/platform/frameworks/support/+/1531924/11/room/ksp-kapt-comparison.sh>
    10 runs (clean compile test app):
     
    total time spent in each group's tasks:
    kapt : 34584 ms
    ksp : 18671 ms
     
    individual task totals:
    kaptGenerateStubsDebugAndroidTestKotlin : 11751 ms
    kspDebugAndroidTestKotlin : 17400 ms
    kaptDebugAndroidTestKotlin : 21407 ms
    kaptAndroidTestDebug : 0 ms
    kapt : 0 ms
    kaptAndroidTest : 41 ms
    kspDebugKotlin : 1225 ms
    kaptGenerateStubsDebugKotlin : 799 ms
    kaptDebugKotlin : 586 ms
    ksp : 46 ms
    kaptDebug : 0 ms
    🎉 16
    ❤️ 5
    s
    • 2
    • 5
  • j

    Jiaxiang

    01/08/2021, 12:49 AM
    Hi, here is a new KSP release: https://github.com/google/ksp/releases/tag/1.4.20-dev-experimental-20210107 Hightlights Breaking Change Starting from this release, we added gradle plugin marker and changed plugin id from 
    symbol-processing
     to 
    com.google.devtools.ksp
    . Now you may remove the 
    resolutionStrategy
     for KSP in 
    setting.gradle.kts
     since it is no longer needed. See playground in attachment for full detail. We also planned to enable incremental processing in next release. Here is a doc describing how to use it and also a few examples. Please give it a try! Issues fixed: released POM files do not list dependencies #187 [Gradle Plugin] Publish plugin marker #203 Incremental logging does not create a file first #210 PRs merged: multi-module tests: make sure javaOut exists before passing to compiler #235 Setup depenedencies in compiler plugin’s POM #233 Report INNER modifier for class descriptors #232 Rebuild if processing options changed #229 Don’t calculate incremental info when incremental processing is disabled #227 Make kspTask depends on processors #222 Refine incremental logs #221 document for incremental processing #220 Rename dependOnNewChanges to aggregating #219 Use property descriptor impl for java properties #217 Add generated resource dir to proper sources and outputs #215 Gradle plugin publishing setup #206
    🎉 8
    y
    • 2
    • 1
  • z

    Zac Sweers

    01/10/2021, 5:47 AM
    I get this warning with the latest release 🤔 . Should I file?
    > Task :moshi-ksp:moshi-ksp:compileTestKotlin
    w: Some JAR files in the classpath have the Kotlin Runtime library bundled into them. This may cause difficult to debug problems if there's a different version of the Kotlin Runtime library in the classpath. Consider removing these libraries from the classpath
    w: /Users/zsweers/.gradle/caches/modules-2/files-2.1/com.google.devtools.ksp/symbol-processing/1.4.20-dev-experimental-20210107/95a5ba4b6dd106b77cbbdc06f1491984b3c6b5/symbol-processing-1.4.20-dev-experimental-20210107.jar: Library has Kotlin runtime bundled into it
    y
    • 2
    • 1
  • z

    Zac Sweers

    01/10/2021, 6:37 AM
    I'm also unable to compile with it, it seems like it tries to force the
    JavaCompile
    task to run even if there are no java source files
    * What went wrong:
    Execution failed for task ':moshi-ksp:moshi-ksp:compileJava'.
    > no source files
    g
    t
    • 3
    • 9
  • s

    suresh

    01/18/2021, 5:10 AM
    I tried to set this option for kotlin compile task - https://youtrack.jetbrains.com/issue/KT-43704#focus=Comments-27-4625141.0-0 , but still not working.
    t
    • 2
    • 5
  • s

    spierce7

    01/21/2021, 12:09 AM
    KSP doesn't support multiplatform yet, right?
    j
    t
    • 3
    • 4
  • m

    miqbaldc

    01/24/2021, 4:39 AM
    is it possible to use KSP side by side with KAPT for now? e.g: 1. Glide will use KSP 2. others still use KAPT (at least for library that still not supported using KSP) if there’s a similar question for this, maybe anyone can refers me which thread (I’m unable to find the right keyword search for this)
    e
    z
    • 3
    • 11
  • f

    F0X

    01/26/2021, 1:17 PM
    I'm trying to write tests that use generated code, and while my IDE thinks everything is perfectly fine the build fails because of missing symbols when running
    test
    after making changes and having built before (it works after clearing the
    .gradle
    cache). I have of course added the generated sources to the source set like so
    kotlin {
        sourceSets {
            main {
                kotlin.srcDir("build/generated/ksp/main/kotlin")
            }
            test {
                kotlin.srcDir("build/generated/ksp/test/kotlin")
            }
        }
    }
    is there anything else that can be done in order to allow access to generated sources in tests?
    j
    t
    • 3
    • 6
  • z

    Zac Sweers

    02/10/2021, 1:28 AM
    should we hold off on
    1.4.30-1.0.0-alpha02
    ?
    🤫 2
    t
    j
    y
    • 4
    • 37
  • t

    Ting-Yuan Huang

    02/10/2021, 5:06 PM
    Hey everyone, we’re excited to announce the alpha release of KSP! Big thanks to everyone in this group for all of the helpful feedback over the last 7 months. Check out the release blog post here. In addition to Kotlin 1.4.30 support, this release introduces multiple round processing, better support for incremental processing, and improvements to support for Android build variants. As for next steps, we’re continuing to add features and refine the API during this alpha period. If you’ve been waiting to try KSP, now is a great time to get started with it. Happy symbol processing!
    🎉 24
    👏 3
    🙌 2
    e
    e
    j
    • 4
    • 10
Powered by Linen
Title
t

Ting-Yuan Huang

02/10/2021, 5:06 PM
Hey everyone, we’re excited to announce the alpha release of KSP! Big thanks to everyone in this group for all of the helpful feedback over the last 7 months. Check out the release blog post here. In addition to Kotlin 1.4.30 support, this release introduces multiple round processing, better support for incremental processing, and improvements to support for Android build variants. As for next steps, we’re continuing to add features and refine the API during this alpha period. If you’ve been waiting to try KSP, now is a great time to get started with it. Happy symbol processing!
🎉 24
👏 3
🙌 2
The most notable API changes to previous release are •
SymbolProcessor.process()
 will be called multiple times until there is no newly generated file. •
SymbolProcessor.process()
 now returns a 
List<KSAnnotated>
, which will be processed again in the next round. The detailed behavior of multiple round processing can be found here.
e

elihart

02/10/2021, 5:31 PM
Congrats on the release, looking forward to trying this out soon 🙂 I have a general question about KSP. Historically KAPT has been fairly buggy, with many fixes to it released over the years. Even in the latest 1.4.30 release there were quite a few KAPT fixes. How closely is your team looking at the bugs and mistakes in KAPT and ensuring that KSP does not include the same bugs? For example, the recent fix for ”
KT-42182
 KAPT: Does not consider generated sources for incremental compilation.” was really important to us and it would be reassuring to know that KSP won’t regress on progress like that. Thanks!
t

Ting-Yuan Huang

02/11/2021, 12:00 AM
I've just subscribed kapt on youtrack and will keep an eye on it. Meanwhile, KSP is open to changes at this alpha stage so please feel free to reach out to us while seeing any bugs or areas to improve, whether they are in the implementation or API design.
🙏 1
e

edrd

02/11/2021, 10:51 PM
Congratulations, folks 🙂 @Ting-Yuan Huang
KSP is open to changes at this alpha stage so please feel free to reach out to us while seeing any bugs or areas to improve, whether they are in the implementation or API design.
I'd love if the API didn't require usage of `var`s because of
init
and
process
on the same interface. So this:
class Processor : SymbolProcessor {
    private lateinit var codeGenerator: CodeGenerator

    fun init(codeGenerator: CodeGenerator, ...) {
        this.codeGenerator = codeGenerator
    }

    fun process(...) {}
}
would become this:
class Processor(private val codeGenerator: CodeGenerator) : SymbolProcessor {
    override fun process(...) { ... }

    object Provider : SymbolProcessorProvider {
        override fun create(codeGenerator: CodeGenerator, ...) = Processor(codeGenerator) 
    }
}
as it's less code and safer. It would also allow for future optimizations like concurrent execution of multiple `SymbolProcessor`s since it would be possible to call
SymbolProcessorProvider.create
, for example, for every module.
t

Ting-Yuan Huang

02/11/2021, 10:58 PM
Make sense. Please allow me to examine this idea carefully before making any promise or change.
👍 1
e

edrd

02/22/2021, 4:38 PM
Hey @Ting-Yuan Huang, this weekend I did hack the KSP code for learning purposes and actually ended up with a working implementation of the proposed API. I'm not sure this has other implications so I opened a PR in my fork repo. Would you mind taking a look? https://github.com/edrd-f/ksp/pull/1 I'd love to contribute to the project, and if these changes make sense, I'll be glad to open the PR on the project repo and keep it updated with
master
.
t

Ting-Yuan Huang

02/23/2021, 5:01 AM
Sorry I'm blocked by other things. Will look into the PR after the release on Wed.
e

edrd

02/23/2021, 12:39 PM
Sure, no problem
j

Jiaxiang

03/04/2021, 7:52 AM
Hi, sorry for delay, just reviewed your PR
❤️ 1
e

edrd

03/05/2021, 11:40 PM
Thanks @Jiaxiang. I'll update the branch and apply the changes you mentioned, and then open a PR on the project repo.
View count: 4