Skip to content

Instantly share code, notes, and snippets.

@dkandalov
dkandalov / promotion-service-kata.kt
Created October 10, 2019 13:14
Promotion service kata
import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test
/*
* The promotion service calculates discounts for promoted items.
* (It's a bit crazy because it's also reducing the tax 🙄)
* The Item class is classic DTO and its fields are not encapsulated.
*
* Make Item a rich object and encapsulate its fields 💪
@dkandalov
dkandalov / plugin.groovy
Created September 10, 2019 19:48
Plugin to create command line launcher for IJ (without using Toolbox)
import com.intellij.execution.ExecutionException
import com.intellij.execution.configurations.GeneralCommandLine
import com.intellij.execution.configurations.PathEnvironmentVariableUtil
import com.intellij.execution.process.ProcessOutput
import com.intellij.execution.util.ExecUtil
import com.intellij.ide.actions.CreateDesktopEntryAction
import com.intellij.ide.actions.CreateLauncherScriptAction
import com.intellij.openapi.application.ApplicationBundle
import com.intellij.openapi.application.ApplicationNamesInfo
import com.intellij.openapi.application.PathManager
@dkandalov
dkandalov / BootTidal.hs
Last active September 12, 2019 23:25
tidal for intellij
:set -XOverloadedStrings
:set prompt ""
:set prompt-cont ""
import Sound.Tidal.Context
-- total latency = oLatency + cFrameTimespan
tidal <- startTidal (superdirtTarget {oLatency = 0.1, oAddress = "127.0.0.1", oPort = 57120}) (defaultConfig {cFrameTimespan = 1/20})
:{
@dkandalov
dkandalov / plugin.kts
Last active September 20, 2025 13:41
Plugin for toggling syntax highlighting in the current file (same as built-in "Highlighting level" slider in the inspector popup)
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
import com.intellij.codeInsight.daemon.impl.analysis.FileHighlightingSetting.FORCE_HIGHLIGHTING
import com.intellij.codeInsight.daemon.impl.analysis.FileHighlightingSetting.SKIP_HIGHLIGHTING
import com.intellij.codeInsight.daemon.impl.analysis.HighlightLevelUtil
import com.intellij.codeInsight.daemon.impl.analysis.HighlightingLevelManager
import com.intellij.lang.injection.InjectedLanguageManager
import com.intellij.openapi.project.Project
import liveplugin.PluginUtil
import liveplugin.currentFile
import liveplugin.registerAction
@dkandalov
dkandalov / plugin.groovy
Last active July 19, 2019 09:49
Popup box with placeholder for video (to be used in IJ presentation mode when recording videos)
import com.intellij.concurrency.JobScheduler
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.Application
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.ui.popup.Balloon
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.util.Disposer
import com.intellij.ui.Gray
import com.intellij.ui.LightColors
import com.intellij.ui.awt.RelativePoint
@dkandalov
dkandalov / plugin.groovy
Created February 12, 2019 13:02
Paragraph navigation for IJ
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.editor.EditorModificationUtil
import com.intellij.openapi.editor.LogicalPosition
import static liveplugin.PluginUtil.currentEditorIn
import static liveplugin.PluginUtil.registerAction
static def process(AnActionEvent event, Closure callback) {
def editor = currentEditorIn(event.project)
@dkandalov
dkandalov / ijkl.json
Last active January 25, 2019 15:47
ijkl keymapping rules for karabiner (see also https://github.com/tekezo/Karabiner-Elements/issues/925 for key names)
{
"title": "Change fn + i/j/k/l' to arrow keys",
"rules": [
{
"description": "Change fn + i/j/k/l' to arrow keys",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "i",
@dkandalov
dkandalov / plugin.groovy
Last active August 9, 2018 22:16
Show man page mini-plugin for LivePlugin (see https://github.com/dkandalov/live-plugin)
import com.intellij.execution.ExecutionManager
import com.intellij.execution.Executor
import com.intellij.execution.executors.DefaultRunExecutor
import com.intellij.execution.filters.TextConsoleBuilderFactory
import com.intellij.execution.ui.ConsoleView
import com.intellij.execution.ui.ConsoleViewContentType
import com.intellij.execution.ui.ExecutionConsole
import com.intellij.execution.ui.RunContentDescriptor
import com.intellij.execution.ui.actions.CloseAction
import com.intellij.icons.AllIcons
fun main(args: Array<String>) {
val f = create {
println(1)
yield() // 1
println(2)
yield() // 2
println(3)
}
f.resume() // starts "f"
f.resume() // continues from "yield 1"
package katas.kotlin.aaa
import katas.kotlin.shouldEqual
import org.junit.Test
data class Cell(val x: Int, val y: Int)
data class Board(val cells: List<Cell> = emptyList()) {
fun evolve(): Board {
val newCells = cells.mapNotNull { cell ->