-
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improved Elixir Code Generation (#12751)
* Bump the minimum version of Elixir supported The previous minimum version of Elixir is several years EOL. The current minimum version of Elixir is also EOL, but is the minimum version required to support some upcoming changes to the config templates. * Bump the minimum version fo Tesla Keep the dependencies up to date * Add a default .formatter.exs * Add two Elixir-specific mustache lambdas - The `atom` lambda results in the proper quoting of an atom depending on the safe contents of the atom text, per the Elixir language specification. That is, `{{#atom}}foo{{/atom}}` will be turned into `:foo` and `{{#atom}foo.bar{{/atom}}` will be turned into `:"foo.bar"`. - The `env_var` lambda results in the treatment of the identifier provided being capitalized as an environment variable would be. `{{#env_var}}apiVersion{{/env_var}}` would become `ENV_VAR`. * Use modern Elixir configuration - This includes runtime configuration - It depends on the `env_var` lambda. * Fix a Language Server Warning This change is *optional*, but removes a LS warning that was raised. * Regenerated openapi_petstore for Elixir * Add ex_doc as a default dependency Fixes #12484 * Refine the regular expression for atoms The original regex incorrectly matched `123Number` (unquoted atoms cannot begin with numbers) and would incorrectly quote atoms ending in `?` or `!`. Through testing with `iex`, it also turns out that the atom `:-` is legal. The following atoms will now not be quoted that would have been incorrectly quoted: - `:-` - `:declawed?` - `:neutered!` The following atoms will be quoted that were incorrectly unquoted: - `:"123Number"` * Improve regex (again), remove files not generated - The previous commit resulted in a number of warnings that were still present and so I played with the regular expression. This did not solve the problem, but the resulting regular expression is *much* better than the previous one, so I'm keeping it. - The problem was that the configuration (`bin/configs/elixir.yaml`) is generated using a 3.0 input spec: ```yaml inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml ``` Which means that there were 16 files committed which were no longer being generated. When I tested with the 2.0 input spec: ```yaml inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml ``` The files were generated again. I *believe* that the correct change here is to switch back to the 2.0 input spec, as it tests more code generation, but I wanted to check in before I did this. The following files are deleted: - `elixir/lib/openapi_petstore/model/additional_properties_any_type.ex` - `elixir/lib/openapi_petstore/model/additional_properties_array.ex` - `elixir/lib/openapi_petstore/model/additional_properties_boolean.ex` - `elixir/lib/openapi_petstore/model/additional_properties_integer.ex` - `elixir/lib/openapi_petstore/model/additional_properties_number.ex` - `elixir/lib/openapi_petstore/model/additional_properties_object.ex` - `elixir/lib/openapi_petstore/model/additional_properties_string.ex` - `elixir/lib/openapi_petstore/model/big_cat.ex` - `elixir/lib/openapi_petstore/model/big_cat_all_of.ex` - `elixir/lib/openapi_petstore/model/inline_response_default.ex` - `elixir/lib/openapi_petstore/model/special_model_name.ex` - `elixir/lib/openapi_petstore/model/type_holder_default.ex` - `elixir/lib/openapi_petstore/model/type_holder_example.ex` - `elixir/lib/openapi_petstore/model/xml_item.ex` - `elixir/pom.xml` - `elixir/test/pet_test.exs` In the interim, I have removed those files from the commit.
- Loading branch information
1 parent
f1dd44d
commit 18a07ea
Showing
71 changed files
with
427 additions
and
950 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 9 additions & 26 deletions
35
modules/openapi-generator/src/main/resources/elixir/config.exs.mustache
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,15 @@ | ||
# This file is responsible for configuring your application | ||
# and its dependencies with the aid of the Mix.Config module. | ||
use Mix.Config | ||
|
||
# This configuration is loaded before any dependency and is restricted | ||
# to this project. If another project depends on this project, this | ||
# file won't be loaded nor affect the parent project. For this reason, | ||
# if you want to provide default values for your application for | ||
# 3rd-party users, it should be done in your "mix.exs" file. | ||
|
||
# You can configure for your application as: | ||
# | ||
# config :{{#underscored}}{{appName}}{{/underscored}}, key: :value | ||
# | ||
# And access this configuration in your application as: | ||
# | ||
# Application.get_env(:{{#underscored}}{{appName}}{{/underscored}}, :key) | ||
# | ||
# Or configure a 3rd-party app: | ||
# | ||
# config :logger, level: :info | ||
# and its dependencies with the aid of the Config module. | ||
# | ||
# This configuration file is loaded before any dependency and | ||
# is restricted to this project. | ||
|
||
# General application configuration | ||
import Config | ||
|
||
config :{{#underscored}}{{appName}}{{/underscored}}, base_url: "{{{basePath}}}" | ||
|
||
# It is also possible to import configuration files, relative to this | ||
# directory. For example, you can emulate configuration per environment | ||
# by uncommenting the line below and defining dev.exs, test.exs and such. | ||
# Configuration from the imported file will override the ones defined | ||
# here (which is why it is important to import them last). | ||
# Import environment specific config. This must remain at the bottom | ||
# of this file so it overrides the configuration defined above. | ||
# | ||
# import_config "#{Mix.env}.exs" | ||
# import_config "#{config_env()}.exs" |
3 changes: 3 additions & 0 deletions
3
modules/openapi-generator/src/main/resources/elixir/formatter.exs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[ | ||
inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
modules/openapi-generator/src/main/resources/elixir/runtime.exs.mustache
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import Config | ||
|
||
# config/runtime.exs is executed for all environments, including | ||
# during releases. It is executed after compilation and before the | ||
# system starts, so it is typically used to load production configuration | ||
# and secrets from environment variables or elsewhere. Do not define | ||
# any compile-time configuration in here, as it won't be applied. | ||
# The block below contains prod specific runtime configuration. | ||
|
||
if env = System.get_env("{{#env_var}}{{appName}}{{/env_var}}_BASE_URI") do | ||
config :{{#underscored}}{{appName}}{{/underscored}}, base_url: env | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[ | ||
inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,15 @@ | ||
# This file is responsible for configuring your application | ||
# and its dependencies with the aid of the Mix.Config module. | ||
use Mix.Config | ||
|
||
# This configuration is loaded before any dependency and is restricted | ||
# to this project. If another project depends on this project, this | ||
# file won't be loaded nor affect the parent project. For this reason, | ||
# if you want to provide default values for your application for | ||
# 3rd-party users, it should be done in your "mix.exs" file. | ||
|
||
# You can configure for your application as: | ||
# | ||
# config :open_api_petstore, key: :value | ||
# | ||
# And access this configuration in your application as: | ||
# | ||
# Application.get_env(:open_api_petstore, :key) | ||
# | ||
# Or configure a 3rd-party app: | ||
# | ||
# config :logger, level: :info | ||
# and its dependencies with the aid of the Config module. | ||
# | ||
# This configuration file is loaded before any dependency and | ||
# is restricted to this project. | ||
|
||
# General application configuration | ||
import Config | ||
|
||
config :open_api_petstore, base_url: "http://petstore.swagger.io:80/v2" | ||
|
||
# It is also possible to import configuration files, relative to this | ||
# directory. For example, you can emulate configuration per environment | ||
# by uncommenting the line below and defining dev.exs, test.exs and such. | ||
# Configuration from the imported file will override the ones defined | ||
# here (which is why it is important to import them last). | ||
# Import environment specific config. This must remain at the bottom | ||
# of this file so it overrides the configuration defined above. | ||
# | ||
# import_config "#{Mix.env}.exs" | ||
# import_config "#{config_env()}.exs" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import Config | ||
|
||
# config/runtime.exs is executed for all environments, including | ||
# during releases. It is executed after compilation and before the | ||
# system starts, so it is typically used to load production configuration | ||
# and secrets from environment variables or elsewhere. Do not define | ||
# any compile-time configuration in here, as it won't be applied. | ||
# The block below contains prod specific runtime configuration. | ||
|
||
if env = System.get_env("OPEN_API_PETSTORE_BASE_URI") do | ||
config :open_api_petstore, base_url: env | ||
end |
Oops, something went wrong.