ebowman / api-first-hand

API-First bootstrapping tool for building RESTful web services from a Swagger/OpenAPI spec
MIT License
142 stars 22 forks source link

Make generated controllers follow scalariform rules #51

Closed NeQuissimus closed 7 years ago

NeQuissimus commented 7 years ago

I have found that api-first-hand and scalariform can end up fighting over imports.

I run Scalariform upon every compilation with the following config

  ScalariformKeys.preferences := FormattingPreferences()
    .setPreference(SpacesAroundMultiImports, true)

Essentially, what happens seems to be that Scalariform re-formats the imports play.api.mvc.{Action, Controller} and play.api.inject.{ApplicationLifecycle,ConfigurationProvider} to include a space after the comma and the ones before inside the braces. Then the api-first-hand generator seems to determine that those imports are missing and re-adds them.

Because of this, every sbt compile adds a pair of imports to my generated controller.

Quickly, I ended up with an import block like this:

import play.api.mvc.{Action, Controller}

import play.api.data.validation.Constraint

import play.api.inject.{ApplicationLifecycle,ConfigurationProvider}

import de.zalando.play.controllers._

import PlayBodyParsing._

import PlayValidations._

import scala.util._

import javax.inject._

import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import play.api.mvc.{ Action, Controller }
import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider }
import de.zalando.play.controllers.Base64String
import Base64String._
import scala.concurrent.Future

This change will make the generator scalariform-friendly and should resolve the above issue.

slavaschmidt commented 7 years ago

@NeQuissimus Thank you very much!