SyntaxError in mix.exs:22 for every elixir script
Closed this issue · 0 comments
Eiji7 commented
Environment:
OS: Funtoo Linux
=== Enabled Profiles: ===
arch: x86-64bit
build: current
subarch: intel64-ivybridge
# ...
Elixir and Erlang version manager: asdf
Elixir version: 1.5.2-otp-20
Erlang version: 20.1
Steps to reproduce:
mix escript.install hex mix_script
- update
PATH
environment variable touch example.exs
(or just copy example fromREADME.md
)mix_script compile example.exs
Full log (replaced tmp directory name with: ...
):
17:48:36.572 [info] parsing script @ example.exs
17:48:36.581 [info] Found these deps:
17:48:36.581 [info] Found this in the script:
17:48:36.583 [info] creating tmp dir
17:48:36.608 [info] created tmp dir /tmp/...
17:48:36.612 [info] executing: "mix" with args ["new", "/tmp/...", "--module", "MixScript", "--app", "mix_script"]
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/mix_script.ex
* creating test
* creating test/test_helper.exs
* creating test/mix_script_test.exs
Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:
cd /tmp/...
mix test
Run "mix help" for more commands.
17:48:36.893 [info] created mix project
17:48:36.893 [info] replacing deps
17:48:36.896 [info] setting up escript
17:48:36.896 [info] executing: "mix" with args ["deps.get"]
** (SyntaxError) mix.exs:22: "do" is missing terminator "end". unexpected token: "]" at line 26
(elixir) lib/code.ex:334: Code.load_file/2
(mix) lib/mix/cli.ex:26: Mix.CLI.proceed/1
(elixir) lib/code.ex:376: Code.require_file/2
ERROR:
{"", 1}
17:48:37.180 [info] executing: "mix" with args ["escript.build"]
** (SyntaxError) mix.exs:22: "do" is missing terminator "end". unexpected token: "]" at line 26
(elixir) lib/code.ex:334: Code.load_file/2
(mix) lib/mix/cli.ex:26: Mix.CLI.proceed/1
(elixir) lib/code.ex:376: Code.require_file/2
ERROR:
{"", 1}
** (File.CopyError) could not copy from "/tmp/.../mix_script" to "/home/username/test2": no such file or directory
(elixir) lib/file.ex:631: File.cp!/3
(mix_script) lib/mix_script.ex:10: MixScript.main/1
(elixir) lib/kernel/cli.ex:90: anonymous fn/3 in Kernel.CLI.exec_fun/2
Expected result:
Project should be compiled and generate a binary.
Actual result:
Project does not compile and therefore can't generate a binary.
Found problem:
Here is output of cat /tmp/.../mix.exs
command:
defmodule MixScript.Mixfile do
use Mix.Project
def project do
[
app: :mix_script,
version: "0.1.0",
elixir: "~> 1.5",
escript: [main_module: MixScript],
deps: deps()
]
end
# Run "mix help compile.app" to learn about applications.
def application do
[
extra_applications: [:logger]
]
end
# Run "mix help deps" to learn about dependencies.
defp deps do
[]
# {:dep_from_hexpm, "~> 0.3.0"},
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"},
]
end
end
As you can see at end of &deps/0
function there is extra ]
character that causes SyntaxError
.
Possible solutions:
-
cond
inLine 41 in c91b7a5
List
that is added to returned tuple, so you can filter every line beforeend
in this function. -
Generate file from your own template with current
Elixir
version and updated dependencies list.
Workaround
I have created PR: #2, so anyone that needs it working can now follow few simple steps:
- Clone my repository:
git clone git@github.com:Eiji7/mix_script.git
or:
git clone https://github.com/Eiji7/mix_script.git
- Enter directory:
cd mix_script
- Build project:
MIX_ENV=prod mix escript.build
- Optionally copy
mix_script
compiled binary wherever you like 😄 - Run
path/to/compiled/mix_script path/to/example.exs