Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merges arrow-meta-prototype #1606

Merged
merged 117 commits into from Sep 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
b5a5ed9
first commit
nomisRev Jun 3, 2019
8161677
First sample
nomisRev Jun 3, 2019
3007b73
Add resources to README.MD
nomisRev Jun 3, 2019
36d4f92
Sample check for purity that illustrate the ClassBuilder phase
raulraja Jun 3, 2019
dc60ca7
Update README.md
nomisRev Jun 3, 2019
2776b09
Update README.md
nomisRev Jun 4, 2019
ec6732d
added intro info's about IR
i-walker Jun 4, 2019
6fd1887
removed unness. parts in IR
i-walker Jun 4, 2019
9995ae6
removed unness. parts in IR
i-walker Jun 4, 2019
587fbe8
added further resources on IR
i-walker Jun 4, 2019
0cd8b64
walk function subexpressions and check for purity
raulraja Jun 4, 2019
b0d4ac2
fix compiler addition
raulraja Jun 5, 2019
9e30033
WIP
raulraja Jun 5, 2019
ddd1d5e
finding all callable expressions and type checking them against purity
raulraja Jun 5, 2019
71c5e5d
Add Jetpack Compose to list of plugin examples
raulraja Jun 5, 2019
ee2442e
Update README.md
raulraja Jun 5, 2019
8eecfdc
Add note on Google having forked Kotlin and not having public sources
raulraja Jun 10, 2019
32554a5
evaluating order of compiler phases based and extensions delegation
raulraja Jun 10, 2019
d3801ee
Add extensions invocation order
raulraja Jun 10, 2019
44ddeaf
Meta DSL progress
raulraja Jun 12, 2019
ab61f33
Subscribing to newMethod, newField and newAnnotation on class builder…
raulraja Jun 12, 2019
07b12d9
Update README.md
raulraja Jun 13, 2019
f6a71bb
more progress
raulraja Jun 14, 2019
c4a567e
remove .DS_STORE from git
nomisRev Jun 16, 2019
3a3760c
progress checkpoint
raulraja Jun 17, 2019
8ac8431
progress checkpoint
raulraja Jun 18, 2019
1da134d
progress checkpoint
raulraja Jun 18, 2019
bbc0792
progress checkpoint
raulraja Jun 18, 2019
23e43ad
Mutate the compiler context with main services discovered in earlier …
raulraja Jun 18, 2019
a9a7ece
moar progress
raulraja Jun 19, 2019
fcc1d15
small cleanup before sharing with JB
raulraja Jun 19, 2019
935f143
clean up
raulraja Jun 19, 2019
9b32fe1
clean up
raulraja Jun 19, 2019
9448a0d
Clean up
raulraja Jun 19, 2019
12cb4dd
Clean up
raulraja Jun 19, 2019
6722b27
Merge pull request #9 from 47deg/rr-keep-start
raulraja Jun 19, 2019
e1fa96a
toward automatic type alias generation
raulraja Jun 20, 2019
39db649
automatic type alias generation
raulraja Jun 20, 2019
4b7884c
update kotlin version and more progress attempting to intercept calls…
raulraja Jun 22, 2019
82c36a7
get a sample of gradle and idea plugin compiling
AdrianRaFo Jun 22, 2019
36c0e62
minor improvements and fixes
AdrianRaFo Jun 23, 2019
2d7b947
BOOM! implicit kinded conversions work!
raulraja Jun 23, 2019
815a8df
clean up
raulraja Jun 23, 2019
2f54bc5
clean up
raulraja Jun 24, 2019
499e3d0
Merge remote-tracking branch 'origin/arf-gradle-plugin' into rr-hk-bo…
raulraja Jun 24, 2019
761ff37
merge Adrians work
raulraja Jun 24, 2019
3ae8340
Finding datatype, type class and instance based on @extension
raulraja Jun 24, 2019
1d26092
progress prototyping type class resolution
raulraja Jun 25, 2019
9c2b055
Port of the most interesting parts of KEEP 87 over to the compiler pl…
raulraja Jun 26, 2019
b96450e
enable the ExtensionResolutionCallChecker
raulraja Jun 26, 2019
c2e0a53
Progress on the callchecker resolution
raulraja Jun 26, 2019
667bd8e
reflection utilities to intercept compiler services
raulraja Jun 26, 2019
7ff1892
Functions can now resolve `@with` arguments in their lexical scope
raulraja Jun 27, 2019
9f778f2
Suppress `NO_VALUE_FOR_PARAMETER` when an extension is properly resol…
raulraja Jun 27, 2019
6ec1d42
Ability to suppress any diagnostic given a CallCheckerContext
raulraja Jun 27, 2019
bff9616
approach to match and unapply tree based on code snippets
raulraja Jul 2, 2019
ccc6c2c
quasiquote DSL progress
raulraja Jul 5, 2019
4943329
intercepting class generation with quotes, only matching on name for now
raulraja Jul 16, 2019
cd48cf4
Initial Draft of the Higher Kind plugin based on quotes
raulraja Jul 16, 2019
731bb9a
Added modality in visibility
raulraja Jul 17, 2019
9ff10f5
remove bogus import
raulraja Jul 17, 2019
9b19156
move trim margins up to processing
raulraja Jul 17, 2019
6eaaef9
support for kinds of N arity up to 22
raulraja Jul 17, 2019
996670d
rename type parameters identifier
raulraja Jul 17, 2019
6ddda92
class matching DSL cleanup and simplification of the model for codegen
raulraja Jul 17, 2019
13f7c0f
injection prototype working with type class package instances
raulraja Jul 27, 2019
032bff5
auto insert with scopes
raulraja Jul 27, 2019
03eee85
Support for `fun`, `val`, `object` and `class` providers of type clas…
raulraja Jul 28, 2019
ec12765
utils clean up
raulraja Jul 28, 2019
719a91a
findExtension cleanup
raulraja Jul 28, 2019
1fa1048
IR transformations as meta functions
raulraja Jul 30, 2019
1124991
IR transformations as meta functions
raulraja Jul 31, 2019
0743a66
Merge pull request #14 from 47deg/rr-tree-quotes-poc
raulraja Jul 31, 2019
4522307
Error reporting for ambiguous extensions
raulraja Jul 31, 2019
b84b780
`with` injection supported in class members
raulraja Aug 1, 2019
4378d54
clean up and more todos
raulraja Aug 1, 2019
ccb18d4
support for internal orphan extensions
raulraja Aug 4, 2019
5388aa7
progress with comprehensions rewrites
raulraja Aug 8, 2019
22470d6
progress with comprehensions rewrites
raulraja Aug 9, 2019
234ccb1
extracting flatMap calls from bindings presence
raulraja Aug 10, 2019
86c060a
binding comprehensions as tree rewrites, working but lacking type che…
raulraja Aug 15, 2019
f9ba5b3
failing comprehensions rewrite example due to binding variables and o…
raulraja Aug 20, 2019
35811d9
failing comprehensions rewrite example due to binding variables and o…
raulraja Aug 22, 2019
f802dad
Merge pull request #18 from 47deg/rr-typeclasses-plugin
raulraja Aug 22, 2019
cb35256
clean up
raulraja Aug 22, 2019
31992fe
Merge pull request #19 from 47deg/rr-cleanup
raulraja Aug 22, 2019
79d27d7
clean up
raulraja Aug 22, 2019
2a31a4c
Merge pull request #22 from 47deg/rr-fix-dea-pluginboot
raulraja Aug 22, 2019
83ca625
First steps into Idea support (#21)
i-walker Aug 23, 2019
2c277ab
Revert "First steps into Idea support (#21)" (#23)
i-walker Aug 23, 2019
8accf03
clean Up (#26)
i-walker Aug 26, 2019
eb1bcbc
fix type class resolution and plugin publishing, still need to autoin…
raulraja Aug 26, 2019
54b6a62
gradle plugin jar cleanUp & fix (#27)
i-walker Aug 26, 2019
e35f416
progress with IDEA discovery shadowing and running the plugin in IDEA…
raulraja Aug 31, 2019
dc626ad
synth resolution progress
raulraja Sep 2, 2019
66e444c
synth resolution progress on file save
raulraja Sep 7, 2019
618a641
synthetic methods and names working!
raulraja Sep 7, 2019
699a75f
more synthetic resolver methods
raulraja Sep 7, 2019
3d79db1
getSyntheticNestedClassNames
raulraja Sep 7, 2019
421cec2
synthetic package fragment provider
raulraja Sep 8, 2019
291a9c8
automatic synth resolution working based on local build output
raulraja Sep 12, 2019
e555cbf
progress on type class resolution on the IDE
raulraja Sep 13, 2019
9ed8de2
IDE body resolution accounting type class injected symbols
raulraja Sep 15, 2019
ba61f4c
Initialize IDE component registration earlier
raulraja Sep 15, 2019
7af21ef
Merge remote-tracking branch 'origin/master' into rr-idea-improvements
raulraja Sep 16, 2019
72f379f
Merge master and some debug output for next iteration
raulraja Sep 16, 2019
1d8928b
Merge pull request #29 from 47deg/rr-idea-improvements
raulraja Sep 16, 2019
628d2fe
package organization
raulraja Sep 16, 2019
9da3ad6
package organization (:compiler-plugin)
raulraja Sep 16, 2019
d6a531c
remove core and consumer modules
raulraja Sep 16, 2019
76287a6
idea reorg
raulraja Sep 16, 2019
50a55a3
Merge pull request #30 from 47deg/rr-improve-code-org
raulraja Sep 16, 2019
f7c4ea2
Update README.md
raulraja Sep 16, 2019
1be2840
Moving arrow-meta-prototype into its own subdirectory
juanpedromoreno Sep 17, 2019
5085cea
Merge remote-tracking branch 'arrow-meta-prototype/master' into featu…
juanpedromoreno Sep 17, 2019
9d5990e
Moves arrow-meta-prototype into the proper subdirectory
juanpedromoreno Sep 17, 2019
a412b2b
Merge branch 'master' into feature/merge-arrow-meta-prototype
raulraja Sep 17, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
134 changes: 134 additions & 0 deletions modules/meta/arrow-meta-prototype/.gitignore
@@ -0,0 +1,134 @@
# Created by https://www.gitignore.io/api/android,intellij

### Android ###
# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# dokka + ank apidocs merge to sources
apidocs/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# Intellij
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/libraries
.idea/markdown-navigator
.idea/

# Keystore files
*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Google Services (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

### Android Patch ###
gen-external-apklibs

### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff:
.idea/**/workspace.xml
.idea/**/tasks.xml

# Sensitive or high-churn files:
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.xml
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml

# Gradle:
.idea/**/gradle.xml
.idea/**/libraries

# Mongo Explorer plugin:
.idea/**/mongoSettings.xml

## File-based project format:
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Jekyll
_site
.sass-cache

### Intellij Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721

# *.iml
# modules.xml
# .idea/misc.xml
# *.ipr

######################

reports/

# End of https://www.gitignore.io/api/android,intellij
/.idea/misc.xml

.DS_Store

target/

.bash_profile
7 changes: 7 additions & 0 deletions modules/meta/arrow-meta-prototype/README.md
@@ -0,0 +1,7 @@
# arrow-meta-prototype

**Build and run in the IDE**

```
./gradlew clean gradle-plugin:publishArrowPluginMarkerMavenPublicationToMavenLocal gradle-plugin:publishPluginMavenPublicationToMavenLocal idea-plugin:runIde -Dorg.gradle.debug=true -Dkotlin.compiler.execution.strategy="in-process"
```
21 changes: 21 additions & 0 deletions modules/meta/arrow-meta-prototype/build.gradle
@@ -0,0 +1,21 @@
buildscript {
ext.kotlin_version = '1.3.50'

repositories {
mavenCentral()
}
}

plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.50'
id 'org.jetbrains.kotlin.kapt' version '1.3.50'
id 'com.github.johnrengelman.shadow' version '5.0.0'
}

allprojects {
repositories {
maven { url "https://kotlin.bintray.com/kotlinx" }
mavenCentral()
jcenter()
}
}
132 changes: 132 additions & 0 deletions modules/meta/arrow-meta-prototype/compiler-plugin/build.gradle
@@ -0,0 +1,132 @@
apply plugin: 'kotlin'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.github.johnrengelman.shadow'


//compileKotlin.kotlinOptions.freeCompilerArgs = ['-Xskip-runtime-version-check', 'true']

dependencies {
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compileOnly "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlin_version"
compileOnly "com.intellij:openapi:7.0.3"
}

compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
jar {
manifest {
attributes["Specification-Title"] = project.name
attributes["Specification-Version"] = project.version
attributes["Implementation-Title"] = "arrow.meta.plugin.compiler"
attributes["Implementation-Version"] = project.version
}
}

shadowJar {
configurations = [project.configurations.compile]
relocate 'org.jetbrains.kotlin.com.intellij', 'com.intellij'
//relocate 'org.jetbrains.kotlin.load', 'kotlin.reflect.jvm.internal.impl.load'
}
//
//com.intellij.findUsagesHandlerFactory
//org.jetbrains.kotlin.scriptDefinitionsProvider
//com.intellij.runConfigurationTemplateProvider
//com.intellij.compiler.task
//org.jetbrains.kotlin.syntheticResolveExtension
//com.intellij.handleTypeFactory
//org.jetbrains.kotlin.expressionCodegenExtension
//org.jetbrains.kotlin.gradleProjectImportHandler
//com.intellij.projectExtension
//com.intellij.java.elementFinder
//org.jetbrains.kotlin.extraImportsProviderExtension
//com.intellij.compilerFactory
//com.intellij.fileContextProvider
//com.intellij.vcs
//org.jetbrains.kotlin.scriptDefinitionContributor
//com.intellij.prePushHandler
//com.intellij.projectViewNodeDecorator
//org.jetbrains.kotlin.classBuilderFactoryInterceptorExtension
//org.jetbrains.kotlin.scriptAdditionalIdeaDependenciesProvider
//org.jetbrains.kotlin.irGenerationExtension
//com.intellij.nonProjectFileWritingAccessExtension
//org.jetbrains.kotlin.jsSyntheticTranslateExtension
//com.intellij.changesViewContent
//com.intellij.vcsRepositoryCreator
//com.intellij.highlightErrorFilter
//com.intellij.projectViewPane
//com.intellij.hectorComponentProvider
//com.intellij.cachedValuesFactory
//com.intellij.vcs.baseContentProvider
//com.intellij.analyzeStacktraceFilter
//org.jetbrains.kotlin.mavenProjectImportHandler
//com.intellij.stepsBeforeRunProvider
//com.intellij.previewPanelProvider
//com.intellij.vcsIgnoreChecker
//com.intellij.checkinHandlerFactory
//com.intellij.compiler.inspectionValidator
//com.intellij.java-i18n.resourceBundleManager
//com.intellij.openapi.extensions.epAvailabilityListener
//com.intellij.editorNotificationProvider
//com.intellij.ignoredFileContentProvider
//com.intellij.highlightVisitor
//org.jetbrains.kotlin.androidDexer
//com.intellij.java.shortNamesCache
//com.intellij.logHighlighterFactory
//com.intellij.vcs.ignoredFilesHolder
//com.intellij.debugger.positionManagerFactory
//com.intellij.paletteItemProvider
//com.intellij.jvm.elementProvider
//com.intellij.favoriteNodeProvider
//org.jetbrains.android.uipreview.viewLoaderExtension
//org.jetbrains.kotlin.declarationAttributeAltererExtension
//com.intellij.vcs.taskHandler
//com.intellij.ideRootPaneNorth
//com.intellij.writingAccessProvider
//com.intellij.logProvider
//com.intellij.scopeTreeExpander
//com.intellij.coverageOptions
//com.intellij.lang.inferredAnnotationProvider
//com.intellij.java.compiler
//com.intellij.directoryIndexExcludePolicy
//org.jetbrains.kotlin.packageFragmentProviderExtension
//com.intellij.runConfigurationsSettings
//com.intellij.selectInTarget
//com.intellij.customScopesProvider
//org.jetbrains.kotlin.scriptTemplatesProvider
//com.intellij.fileBreadcrumbsCollector
//com.intellij.vcs.fileStatusProvider
//com.intellij.vcs.changes.changesViewModifier
//com.intellij.customFileDropHandler
//org.jetbrains.kotlin.kotlinIndicesHelperExtension
//com.intellij.javadocTagInfo
//com.intellij.problemFileHighlightFilter
//com.intellij.patch.extension
//com.intellij.streamProviderFactory
//com.intellij.multiHostInjector
//com.intellij.treeStructureProvider
//com.intellij.projectModelModifier
//com.intellij.psi.treeChangePreprocessor
//com.intellij.projectUndoProvider
//com.intellij.cherryPicker
//com.intellij.compiler
//com.intellij.autoImportOptionsProvider
//com.intellij.buildProcess.parametersProvider
//com.intellij.editChangelistSupport
//com.intellij.favoritesListProvider
//com.intellij.pushSupport
//com.intellij.roots.watchedRootsProvider
//com.intellij.compilerSettingsFactory
//org.jetbrains.kotlin.simpleNameReferenceExtension
//com.intellij.vcsChangesViewRefresher
//com.intellij.vcs.branchStateProvider
//org.jetbrains.kotlin.storageComponentContainerContributor
//com.intellij.refactoring.elementListenerProvider
//com.intellij.usageContextPanelProvider
//com.intellij.projectConfigurable
//org.jetbrains.kotlin.syntheticScopeProviderExtension
//com.android.project.projectsystem
@@ -0,0 +1,13 @@
package arrow.meta

import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor

//@AutoService(CommandLineProcessor::class)
class MetaCliProcessor : CommandLineProcessor {

override val pluginId: String = "arrow.meta.plugin.compiler"

override val pluginOptions: Collection<CliOption> = emptyList()

}
@@ -0,0 +1,12 @@
package arrow.meta

import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor

class MetaCommandLineProcessor : CommandLineProcessor {

override val pluginId: String = "arrow.meta.plugin.compiler"

override val pluginOptions: Collection<CliOption> = emptyList()

}
@@ -0,0 +1,18 @@
package arrow.meta

import arrow.meta.dsl.MetaPluginSyntax
import arrow.meta.internal.registry.InternalRegistry
import arrow.meta.phases.ExtensionPhase
import org.jetbrains.kotlin.com.intellij.mock.MockProject
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.name.Name

interface MetaComponentRegistrar : ComponentRegistrar, MetaPluginSyntax, InternalRegistry {

override fun intercept(): List<Pair<Name, List<ExtensionPhase>>>

override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) =
super.registerProjectComponents(project, configuration)

}
@@ -0,0 +1,11 @@
package arrow.meta

import arrow.meta.phases.ExtensionPhase
import arrow.meta.plugins.higherkind.higherKindedTypes
import arrow.meta.plugins.typeclasses.typeClasses
import org.jetbrains.kotlin.name.Name

open class MetaPlugin : MetaComponentRegistrar {
override fun intercept(): List<Pair<Name, List<ExtensionPhase>>> =
listOf(higherKindedTypes, typeClasses) //, higherKindedTypes, typeClasses, comprehensions)
}
@@ -0,0 +1,14 @@
package arrow.meta.dsl

import arrow.meta.dsl.analysis.AnalysisSyntax
import arrow.meta.dsl.codegen.CodegenSyntax
import arrow.meta.dsl.config.ConfigSyntax
import arrow.meta.dsl.resolve.ResolveSyntax
import arrow.meta.phases.ExtensionPhase

interface MetaPluginSyntax : ConfigSyntax, AnalysisSyntax, ResolveSyntax, CodegenSyntax {

fun meta(vararg phases: ExtensionPhase): List<ExtensionPhase> =
phases.toList()

}