Skip to content

Commit 3555df6

Browse files
enable dialyzer and fix warnings
1 parent d2775a1 commit 3555df6

File tree

9 files changed

+42
-22
lines changed

9 files changed

+42
-22
lines changed

.github/workflows/ci.yml

+19
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
otp: 24.1
2222
check_warnings: true
2323
check_format: true
24+
dialyzer: true
2425
steps:
2526
- uses: actions/checkout@v2
2627
- uses: erlef/setup-elixir@v1
@@ -33,3 +34,21 @@ jobs:
3334
- run: mix compile --force --warnings-as-errors
3435
if: ${{ matrix.check_warnings }}
3536
- run: mix test --trace
37+
- name: Restore PLT cache
38+
uses: actions/cache@v2
39+
if: ${{ matrix.dialyzer }}
40+
id: plt_cache
41+
with:
42+
key: |
43+
${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-plt
44+
restore-keys: |
45+
${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-plt
46+
path: |
47+
priv/plts
48+
# Create PLTs if no cache was found
49+
- name: Create PLTs
50+
if: ${{ matrix.dialyzer && steps.plt_cache.outputs.cache-hit != 'true' }}
51+
run: mix dialyzer --plt
52+
- name: Run dialyzer
53+
if: ${{ matrix.dialyzer }}
54+
run: mix dialyzer

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,6 @@ zstream-*.tar
2424

2525
# Temporary files for e.g. tests.
2626
/tmp
27+
28+
/priv/plts/*.plt
29+
/priv/plts/*.plt.hash

lib/zstream.ex

+1
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,6 @@ defmodule Zstream do
8787
* Doesn't support file which uses data descriptor header.
8888
* Doesn't support encrypted file.
8989
"""
90+
@spec zip(Enumerable.t()) :: Enumerable.t()
9091
defdelegate unzip(stream), to: Zstream.Unzip
9192
end

lib/zstream/decoder.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Zstream.Decoder do
33

44
@callback init() :: term
55

6-
@callback decode(chunk :: iodata, state :: term) :: {[{:data, iodata}], term}
6+
@callback decode(chunk :: iodata, state :: term) :: {Enumerable.t(), term}
77

88
@callback close(state :: term) :: iodata
99

lib/zstream/unzip.ex

+12-18
Original file line numberDiff line numberDiff line change
@@ -133,26 +133,20 @@ defmodule Zstream.Unzip do
133133
def local_file_header(data, state) do
134134
data = IO.iodata_to_binary(data)
135135

136-
case parse_local_header(data) do
137-
{:ok, local_header, rest} ->
138-
{decoder, decoder_state} = Zstream.Decoder.init(local_header.compression_method)
136+
{:ok, local_header, rest} = parse_local_header(data)
137+
{decoder, decoder_state} = Zstream.Decoder.init(local_header.compression_method)
139138

140-
if bit_set?(local_header.general_purpose_bit_flag, 3) do
141-
raise Error, "Zip files with data descriptor record are not supported"
142-
end
143-
144-
execute_state_machine(rest, %{
145-
state
146-
| local_header: local_header,
147-
next: :filename_extra_field,
148-
decoder: decoder,
149-
decoder_state: decoder_state
150-
})
151-
152-
:done ->
153-
state = %{state | next: :done}
154-
{[], state}
139+
if bit_set?(local_header.general_purpose_bit_flag, 3) do
140+
raise Error, "Zip files with data descriptor record are not supported"
155141
end
142+
143+
execute_state_machine(rest, %{
144+
state
145+
| local_header: local_header,
146+
next: :filename_extra_field,
147+
decoder: decoder,
148+
decoder_state: decoder_state
149+
})
156150
end
157151

158152
def filename_extra_field(data, state) do

lib/zstream/zip.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ defmodule Zstream.Zip do
200200
if state.coder do
201201
_compressed = state.coder.close(state.coder_state)
202202
state = put_in(state.coder, nil)
203-
put_in(state.coder_state, nil)
203+
state = put_in(state.coder_state, nil)
204204
_encrypted = state.encryption_coder.close(state.encryption_coder_state)
205205
state = put_in(state.encryption_coder, nil)
206206
put_in(state.encryption_coder_state, nil)

mix.exs

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ defmodule Zstream.Mixfile do
1515
docs: docs(),
1616
dialyzer: [
1717
plt_add_deps: :transitive,
18-
flags: [:unmatched_returns, :race_conditions, :error_handling, :underspecs]
18+
flags: [:unmatched_returns, :race_conditions, :error_handling, :underspecs],
19+
plt_file: {:no_warn, "priv/plts/dialyzer.plt"}
1920
],
2021
deps: deps()
2122
]
@@ -30,7 +31,8 @@ defmodule Zstream.Mixfile do
3031
defp deps do
3132
[
3233
{:temp, "~> 0.4", only: :test, runtime: false},
33-
{:ex_doc, ">= 0.0.0", only: :dev, runtime: false}
34+
{:ex_doc, ">= 0.0.0", only: :dev, runtime: false},
35+
{:dialyxir, "~> 0.5", only: [:dev], runtime: false}
3436
]
3537
end
3638

mix.lock

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
%{
2+
"dialyxir": {:hex, :dialyxir, "0.5.1", "b331b091720fd93e878137add264bac4f644e1ddae07a70bf7062c7862c4b952", [:mix], [], "hexpm", "6c32a70ed5d452c6650916555b1f96c79af5fc4bf286997f8b15f213de786f73"},
23
"earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"},
34
"earmark_parser": {:hex, :earmark_parser, "1.4.12", "b245e875ec0a311a342320da0551da407d9d2b65d98f7a9597ae078615af3449", [:mix], [], "hexpm", "711e2cc4d64abb7d566d43f54b78f7dc129308a63bc103fbd88550d2174b3160"},
45
"ex_doc": {:hex, :ex_doc, "0.24.2", "e4c26603830c1a2286dae45f4412a4d1980e1e89dc779fcd0181ed1d5a05c8d9", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "e134e1d9e821b8d9e4244687fb2ace58d479b67b282de5158333b0d57c6fb7da"},

priv/plts/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)