Skip to content

Commit

Permalink
[ #20 ] show.need format.
Browse files Browse the repository at this point in the history
  • Loading branch information
zxj5470 committed Feb 1, 2018
1 parent a43090e commit 49da608
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 0 deletions.
2 changes: 2 additions & 0 deletions res/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ Please don't downvote our plugin for not having one of the features above, becau
<fileTypeFactory implementation="org.ice1000.julia.lang.JuliaFileTypeFactory"/>
<sdkType implementation="org.ice1000.julia.lang.module.JuliaSdkType"/>
<colorSettingsPage implementation="org.ice1000.julia.lang.JuliaColorSettingsPage"/>
<codeStyleSettingsProvider implementation="org.ice1000.julia.lang.editing.JuliaCodeStyleSettingsProvider"/>
<langCodeStyleSettingsProvider implementation="org.ice1000.julia.lang.editing.JuliaLanguageCodeStyleSettingsProvider"/>
<defaultLiveTemplatesProvider implementation="org.ice1000.julia.lang.JuliaLiveTemplateProvider"/>
<liveTemplateContext implementation="org.ice1000.julia.lang.JuliaContext"/>
<configurationType implementation="org.ice1000.julia.lang.execution.JuliaRunConfigurationType"/>
Expand Down
112 changes: 112 additions & 0 deletions src/org/ice1000/julia/lang/editing/julia-code-style.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package org.ice1000.julia.lang.editing

import com.intellij.application.options.*
import com.intellij.openapi.options.Configurable
import com.intellij.psi.codeStyle.*
import com.intellij.psi.codeStyle.CodeStyleSettings
import com.intellij.openapi.application.ApplicationBundle
import com.intellij.psi.codeStyle.CustomCodeStyleSettings
import com.intellij.psi.codeStyle.CodeStyleSettingsProvider
import com.intellij.psi.codeStyle.CommonCodeStyleSettings
import org.ice1000.julia.lang.*


class JuliaCodeStyleSettings(settings: CodeStyleSettings)
: CustomCodeStyleSettings(JuliaBundle.message("julia.codestyle.settings.tag-name"), settings)

class JuliaCodeStyleSettingsProvider : CodeStyleSettingsProvider() {
override fun getConfigurableDisplayName() = JULIA_LANGUAGE_NAME
override fun createCustomSettings(settings: CodeStyleSettings): CustomCodeStyleSettings {
return JuliaCodeStyleSettings(settings)
}

override fun createSettingsPage(settings: CodeStyleSettings, originalSettings: CodeStyleSettings): Configurable {
return object : CodeStyleAbstractConfigurable(settings, originalSettings, JULIA_LANGUAGE_NAME) {
override fun createPanel(settings: CodeStyleSettings): CodeStyleAbstractPanel {
return SimpleCodeStyleMainPanel(currentSettings, settings)
}

override fun getHelpTopic() = ""
}
}

private class SimpleCodeStyleMainPanel(currentSettings: CodeStyleSettings, settings: CodeStyleSettings) : TabbedLanguageCodeStylePanel(JuliaLanguage.INSTANCE, currentSettings, settings) {
override fun initTabs(settings: CodeStyleSettings?) {
addIndentOptionsTab(settings)
addWrappingAndBracesTab(settings)
addBlankLinesTab(settings)
}
}
}


class JuliaLanguageCodeStyleSettingsProvider : LanguageCodeStyleSettingsProvider() {
override fun getLanguage() = JuliaLanguage.INSTANCE!!

override fun getDefaultCommonSettings(): CommonCodeStyleSettings =
CommonCodeStyleSettings(language).apply {
RIGHT_MARGIN = 100
ALIGN_MULTILINE_PARAMETERS_IN_CALLS = true
initIndentOptions().apply {
INDENT_SIZE = 4
CONTINUATION_INDENT_SIZE = INDENT_SIZE
}
}

override fun customizeSettings(consumer: CodeStyleSettingsCustomizable, settingsType: SettingsType) {
@Suppress("NON_EXHAUSTIVE_WHEN")
when (settingsType) {
SettingsType.SPACING_SETTINGS -> {
consumer.showStandardOptions("SPACE_AROUND_ASSIGNMENT_OPERATORS")
consumer.renameStandardOption("SPACE_AROUND_ASSIGNMENT_OPERATORS", "Separator")
}
SettingsType.WRAPPING_AND_BRACES_SETTINGS -> {
consumer.showStandardOptions("WRAPPING_KEEP","WRAPPING_BRACES")
}
SettingsType.BLANK_LINES_SETTINGS -> consumer.showStandardOptions("KEEP_BLANK_LINES_IN_CODE")
// SettingsType.LANGUAGE_SPECIFIC -> TODO()
}
}

override fun getIndentOptionsEditor() = SmartIndentOptionsEditor()

override fun getCodeSample(settingsType: SettingsType) =
"""|#=
| BLOCK COMMENT
|=#
|module <moduleName>ice1000</moduleName>
|NaN32 # NaN32 (Float32)
|(1 + 3.2)::Float64
|IntOrString = Union{Int, AbstractString}
|div(5, 2) # => 2 # for a truncated result, use div
|<macroRef>@printf</macroRef> "%d is less than %f" 4.5 5.3 # 5 is less than 5.300000
|assertTrue("1 + 2 = 3" == "1 + 2 = $(1 + 2)")
|[1, 2, 3][2] # => 2, index start from 1
|try
| println("Hello<stringEscape>\n</stringEscape>World <stringEscapeInvalid>'\xjb'</stringEscapeInvalid>" +
| '<charEscapeInvalid>\x</charEscapeInvalid>' + '<charEscape>\a<charEscape>')
| some_other_var # => Unresolved reference: some_other_var
|catch exception
| println(exception)
|end
|abstract type <abstractTypeName>Cat</abstractTypeName> <: Animals end
|primitive type <primitiveTypeName>Bool</primitiveTypeName> <: Integer 8 end
|type <typeName>Dog</typeName> <: Animals
| age::Int64
|end
|macro <macroName>assert</macroName>(condition)
| return :( ${JULIA_STRING_DOLLAR}ex ? nothing : throw(AssertionError(${JULIA_STRING_DOLLAR}{'$'}(string(ex)))) )
|end
|function <functionName>fib</functionName>(n)
| return n ≤ 2 ? 1 : fib(n - 1) + fib(n - 2)
|end
|for (k, v) in Dict("dog"=>"mammal", "cat"=>"mammal", "mouse"=>"mammal")
| println("${JULIA_STRING_DOLLAR}k is a ${JULIA_STRING_DOLLAR}v")
|end
|x = 0
|while x ≤ 4
| println(x)
| x += 1
|end
|end""".trimMargin()
}
2 changes: 2 additions & 0 deletions src/org/ice1000/julia/lang/julia-bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ julia.highlighter.settings.module-name.ref=References//Module
julia.highlighter.settings.macro-name.ref=References//Macro
julia.highlighter.settings.unresolved=References//Unresolved

julia.codestyle.settings.tag-name=JuliaCodeStyleSettings

julia.actions.new-proj.dialog.title=New Julia Project
julia.actions.new-file.title=New Julia File
julia.actions.new-file.description=Creates new Julia file
Expand Down

0 comments on commit 49da608

Please sign in to comment.