ExMacroInspect
ExMacroInspect is a macro inspection library for elixir. I makes it easy for a developer to see what is passed into a macro during macro development.
Source:
Installation
If available in Hex, the package can be installed
by adding ex_macro_inspect to your list of dependencies in mix.exs:
def deps do
[
{:ex_macro_inspect, "~> 0.1.0"}
]
endCore Checklist
- [x] setup README.md - create README
- [x] setup LICENSE file - create LICENSE pick Apache
- [x] automated build - makefile automated help
- [x] build configuration - elixir mix.exs setup
- [x] code formatter - elixir formatter and configuration setup
- [x] style check - elixir credo
- [x] static analysis - elixir dialyzer
- [x] project documentation - elixir ex_doc setup with makefile
- [x] code coverage - elixir code coverage with excoveralls
- [x] publish the package - publish to hex
Optional Checklist
- [x] deployment package - erlang release with distillery
-
[x] phx configuration 4 package - config.exs setup with aliases
- [x] distillery config - update config/prod.exs with “config :phoenix, :serve_endpoints, true”
- [ ] logging - elixir logging
- [x] benchmarking setup - elixir benchee setup
- [x] load testing setup - elixir wrk
setup README checklist
- [ ] create README
- [ ] add project description
- [ ] add main project source reference: github_url_to_self
- [ ] add contributors section
setup LICENSE checklist
- [ ] select licence from: https://choosealicense.com/
- [ ] create LICENSE file
- [ ] update template with things like name, description and copyright as necessary
automated build checklist
- [ ] copy makefile from https://github.com/smorin/ExMacroInspect
-
[ ] update in the makefile variable
app-name := ex_macro_inspectto be the value ofmix.exs:def project[app:] - [ ] test makefile see below
build configuration checklist
-
[ ] update
def project dowithaliases: aliases(), -
[ ] create
defp aliasessee below -
[ ] update
def project dowithdefault_task: "help_make",defp aliases do [ help_make: "cmd make" ] end -
[ ] test alias
mixyou should see make commands
code formatter checklist
-
[ ] create
.formatter.exs[ inputs: ["mix.exs", "{config,lib,test}/**/*.{ex,exs}"] ] -
[ ] test
make format
style check checklist
-
[ ] add to deps
{:credo, "~> 0.9.1", only: [:dev, :test], runtime: false} -
[ ] test
make style-checks
static analysis checklist
-
[ ] add to deps
{:dialyxir, "~> 1.0.0-rc.2", only: [:dev], runtime: false} -
[ ] test
make static-analysis
Test makefile build
-
[ ] check after setting up
code formatter,style checkandstatic analysiswithmake setup build
project documentation checklist
-
[ ] add to deps
{:ex_doc, "~> 0.16", only: :dev, runtime: false} -
[ ] update
def project dowith- [ ] name: “project_name”,
- [ ] source_url: “https://github.com/USER/PROJECT”,
- [ ] homepage_url: “http://YOUR_PROJECT_HOMEPAGE”,
- [ ] description: “”” ADD YOUR DESCRIPTION “””
-
[ ] add to
def project do [ docs: docs(),]anddefp docssee below - [ ] Reference configs here: https://hexdocs.pm/ex_doc/Mix.Tasks.Docs.html#content
-
[ ] add to
defp docs- [ ] main: “ModuleName_or_Page” - Main page of the documentation. It may be a module or a generated page
- [ ] logo: “path/to/file.png_or_jpg”
-
[ ] extras:
"README.md": [filename: "readme", title: "README"]] - [ ] extra_section: “Name of Extra Section in docs”
-
[ ] optionally add groups_for_extras:
[ Introduction: Path.wildcard("guides/introduction/*.md") ] -
[ ] optionally add groups_for_modules:
[ Controllers: [ Module.Name ] ] - [ ] optionally add assets: “path/to/dir”
-
[ ] test documentation
make docs open-docs### -- # all configuration required by ex_doc to configure the generation of documents ### -- defp docs do [ main: "ModuleName_or_Page", logo: "guides/assets/image.png_or_jpg", extras: ["README.md": [filename: "readme", title: "README"]], extra_section: "GUIDES", groups_for_extras: [ Introduction: Path.wildcard("guides/introduction/*.md") ], # Ungrouped Modules: # # OtherModules groups_for_modules: [ Controllers: [ Module.Name ] ] ] end
code coverage checklist
-
[ ] add to deps
{:excoveralls, "~> 0.8", only: [:dev, :test]} -
[ ] update
def project dowithtest_coverage: [tool: ExCoveralls], -
[ ] test
make coverage-report
publish the package
-
[ ] Install hex
mix local.hex -
[ ] Register hex user run:
mix hex.user register - [ ] Confirm your account via email
-
[ ] update
def project dowithpackage: package(), see below -
[ ] mix.exs add fill out
defp packagekeys - [ ] check no git dependencies
-
[ ] run:
mix hex.publish
defp package() do
[
# This option is only needed when you don't want to use the OTP application name
name: "package_name",
organization: "hexpm",
# These are the default files included in the package
files: ["lib", "priv", "mix.exs", "README*", "readme*", "LICENSE*", "license*"],
licenses: ["GNU 3.0"],
links: %{"GitHub" => "https://github.com/USERNAME/PROJECTNAME"}
]
endDocumentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/ex_macro_inspect.
Core References
- https://github.com/parroty/excoveralls
- https://github.com/jeremyjh/dialyxir
- https://github.com/rrrene/credo
- https://github.com/bitwalker/distillery
- https://github.com/elixir-lang/ex_doc
Optional Refrences
- https://github.com/wg/wrk
- https://github.com/elixir-lang/elixir/tree/master/lib/logger
- https://github.com/PragTob/benchee
Contributors
- Steve Morin - https://github.com/smorin