Git Product home page Git Product logo

Comments (5)

christopheradams avatar christopheradams commented on June 9, 2024

Nested modules are not that common, so it's hard to say if there's an accepted style. In general, they would be well-placed after any defstruct and any @type definitions, but before the parent module's functions.

Here's an example from the standard library: https://github.com/elixir-lang/elixir/blob/9b6ec7bae79ececfb9ed481c780febb6a5b293e8/lib/elixir/lib/version.ex#L109

from elixir_style_guide.

Odaeus avatar Odaeus commented on June 9, 2024

Sounds fine to me!

I use it a lot for structs but I notice a project like HTTPoison defines them in the same file but outside of the module. Do you think that style is more common? I assume not so much that it should be recommended in the style guide instead of nesting.

Please let me know if I should submit a PR with the nested defmodule addition.

from elixir_style_guide.

christopheradams avatar christopheradams commented on June 9, 2024

This guide has already settled on a preference for one module per file, which would suggest nesting modules rather than defining them one after the other as HTTPoison does.

It's hard to recommend a precise location for nested defmodule since there aren't many examples to go on. We can agree it should go after defstruct but before any functions. If forced to choose, I would include it in item xiii, as "defmacro, defmodule, defguard, def, etc." and place defmodule after defmacro, since everything above that seems more like the module's preamble, and everything after that the real working code.

What do you think?

from elixir_style_guide.

Odaeus avatar Odaeus commented on June 9, 2024

Sounds reasonable 👍

from elixir_style_guide.

christopheradams avatar christopheradams commented on June 9, 2024

A PR would be welcome on this!

from elixir_style_guide.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.