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

configure codeStyles for intellij import #2015

Merged
merged 3 commits into from
Dec 10, 2021
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,11 @@ class BaselineIdea extends AbstractBaselinePlugin {

private void addCodeStyleIntellijImport() {
def ideaStyleFile = project.file("${configDir}/idea/intellij-java-palantir-style.xml")
// This runs eagerly, so the file might not exist if we haven't run `baselineUpdateConfig` yet.
// Thus, don't do anything if the file is not there yet.
if (!ideaStyleFile.isFile()) {
return
}

def ideaStyle = new XmlParser().parse(ideaStyleFile)
.component
Expand All @@ -176,10 +181,15 @@ class BaselineIdea extends AbstractBaselinePlugin {
project.file(".idea/codeStyles/Project.xml"),
{
def codeScheme = GroovyXmlUtils.matchOrCreateChild(it, "code_scheme", [name: 'Project'])
// Just add the default configuration nodes on top of whatever nodes already exist
// We could be better about this, but IDEA will mostly resolve the duplicates here for us
ideaStyleSettings.value.option.forEach {
codeScheme.append(it)
Comment on lines -179 to -182
Copy link
Contributor Author

@carterkozak carterkozak Dec 9, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Turns out Project.xml used to grow indefinitely over time....

codeScheme.attributes().putIfAbsent("version", 173)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to keep this version updated going forwards?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure, but the property names may not work correctly on other versions

def javaCodeStyleSettings = GroovyXmlUtils.matchOrCreateChild(codeScheme, "JavaCodeStyleSettings")
// Avoid re-adding duplicate options to the project. This allows users to override settings based
// on preference.
ideaStyleSettings.value.option.forEach { ideaStyleSetting ->
def settingName = ideaStyleSetting.attributes().get("name")
if (settingName != null && javaCodeStyleSettings["option"].find { it.attributes().get("name") == settingName } == null) {
javaCodeStyleSettings.append(ideaStyleSetting)
}
}
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,8 @@ class BaselineIdeaIntegrationTest extends AbstractPluginTest {

def ideaStyleSettings = new File(projectDir, ".idea/codeStyles/Project.xml").text
ideaStyleSettings.startsWith('<component name="ProjectCodeStyleConfiguration">')
ideaStyleSettings.contains('<code_scheme name="Project">')
ideaStyleSettings.contains('<code_scheme name="Project" version="173">')
ideaStyleSettings.contains('<JavaCodeStyleSettings>')
ideaStyleSettings.contains('<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true"/>')
ideaStyleSettings.endsWith("""
</code_scheme>
Expand Down