Skip to content

Commit 51189f4

Browse files
committed
slightly less method invalidation & run formatter
1 parent 2580374 commit 51189f4

File tree

8 files changed

+233
-278
lines changed

8 files changed

+233
-278
lines changed

.JuliaFormatter.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
always_for_in = true
2+
always_use_return = true
3+
import_to_using = true
4+
pipe_to_function_call = true
5+
remove_extra_newlines = true
6+
short_to_long_function_def = true
7+
style = "yas"
8+
whitespace_in_kwargs = false
9+
whitespace_ops_in_indices = true
10+
whitespace_typedefs = false

docs/make.jl

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,9 @@ using GeometryBasics
77
# Copy the README to serve as the homepage
88
cp(joinpath(@__DIR__, "..", "README.md"), joinpath(@__DIR__, "src", "index.md"))
99

10-
makedocs(
11-
format = Documenter.HTML(),
12-
sitename = "GeometryBasics.jl",
13-
pages = [
14-
"index.md",
15-
"primitives.md",
16-
"rectangles.md",
17-
"polygons.md",
18-
"meshes.md",
19-
"decomposition.md",
20-
"distancefields.md",
21-
"metadata.md",
22-
"api.md",
23-
],
24-
modules = [GeometryBasics]
25-
)
10+
makedocs(format=Documenter.HTML(), sitename="GeometryBasics.jl",
11+
pages=["index.md", "primitives.md", "rectangles.md", "polygons.md", "meshes.md",
12+
"decomposition.md", "distancefields.md", "metadata.md", "api.md"],
13+
modules=[GeometryBasics])
2614

27-
deploydocs(
28-
repo = "github.com/JuliaGeometry/GeometryBasics.jl.git",
29-
push_preview = true
30-
)
15+
deploydocs(repo="github.com/JuliaGeometry/GeometryBasics.jl.git", push_preview=true)

src/basic_types.jl

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,8 @@ function LineString(points::AbstractVector{<:AbstractPoint}, skip=1)
209209
return LineString(connect(points, LineP, skip))
210210
end
211211

212-
function LineString(points::AbstractVector{<:Pair{P,P}}) where {P<:AbstractPoint{N,T}} where {N, T}
212+
function LineString(points::AbstractVector{<:Pair{P,P}}) where {P<:AbstractPoint{N,T}} where {N,
213+
T}
213214
return LineString(reinterpret(LineP{N,T,P}, points))
214215
end
215216

@@ -261,8 +262,9 @@ function Base.:(==)(a::Polygon, b::Polygon)
261262
end
262263

263264
function Polygon(exterior::E,
264-
interiors::AbstractVector{E}) where
265-
{E<:AbstractVector{LineP{Dim,T,P}}} where {Dim, T, P}
265+
interiors::AbstractVector{E}) where {E<:AbstractVector{LineP{Dim,T,P}}} where {Dim,
266+
T,
267+
P}
266268
return Polygon{Dim,T,P,typeof(exterior),typeof(interiors)}(exterior, interiors)
267269
end
268270

@@ -279,12 +281,15 @@ function Polygon(exterior::AbstractVector{P}, faces::AbstractVector{<:Integer},
279281
end
280282

281283
function Polygon(exterior::AbstractVector{P},
282-
faces::AbstractVector{<:LineFace}) where {P<:AbstractPoint{Dim,T}} where {Dim, T}
284+
faces::AbstractVector{<:LineFace}) where {P<:AbstractPoint{Dim,T}} where {Dim,
285+
T}
283286
return Polygon(LineString(exterior, faces))
284287
end
285288

286289
function Polygon(exterior::AbstractVector{P},
287-
interior::AbstractVector{<:AbstractVector{P}}) where {P<:AbstractPoint{Dim, T}} where {Dim, T}
290+
interior::AbstractVector{<:AbstractVector{P}}) where {P<:AbstractPoint{Dim,
291+
T}} where {Dim,
292+
T}
288293
ext = LineString(exterior)
289294
# We need to take extra care for empty interiors, since
290295
# if we just map over it, it won't infer the element type correctly!
@@ -295,7 +300,7 @@ end
295300

296301
function coordinates(polygon::Polygon{N,T,PointType}) where {N,T,PointType}
297302
exterior = coordinates(polygon.exterior)
298-
return if isempty(polygon.interiors)
303+
if isempty(polygon.interiors)
299304
return exterior
300305
else
301306
result = PointType[]
@@ -310,7 +315,6 @@ end
310315
"""
311316
struct MultiPolygon{Dim,T<:Real,Element<:AbstractPolygon{Dim,T},
312317
A<:AbstractVector{Element}} <: AbstractVector{Element}
313-
314318
polygons::A
315319
end
316320

@@ -376,7 +380,7 @@ end
376380
Tables.schema(mesh::Mesh) = Tables.schema(getfield(mesh, :simplices))
377381

378382
function Base.getproperty(mesh::Mesh, name::Symbol)
379-
return if name === :position
383+
if name === :position
380384
# a mesh always has position defined by coordinates...
381385
return metafree(coordinates(mesh))
382386
else
@@ -386,7 +390,7 @@ end
386390

387391
function Base.propertynames(mesh::Mesh)
388392
names = propertynames(getfield(mesh, :simplices))
389-
return if :position in names
393+
if :position in names
390394
return names
391395
else
392396
# a mesh always has positions!

src/fixed_arrays.jl

Lines changed: 103 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -8,113 +8,109 @@ end
88

99
macro fixed_vector(name, parent)
1010
expr = quote
11-
struct $(name){S,T} <: $(parent){S,T}
12-
data::NTuple{S,T}
13-
14-
function $(name){S,T}(x::NTuple{S,T}) where {S,T}
15-
return new{S,T}(x)
16-
end
17-
18-
function $(name){S,T}(x::NTuple{S,Any}) where {S,T}
19-
return new{S,T}(StaticArrays.convert_ntuple(T, x))
20-
end
21-
end
22-
23-
size_or(::Type{$(name)}, or) = or
24-
eltype_or(::Type{$(name)}, or) = or
25-
eltype_or(::Type{$(name){S,T} where S}, or) where {T} = T
26-
eltype_or(::Type{$(name){S,T} where T}, or) where {S} = or
27-
eltype_or(::Type{$(name){S,T}}, or) where {S,T} = T
28-
29-
size_or(::Type{$(name){S,T} where S}, or) where {T} = or
30-
size_or(::Type{$(name){S,T} where T}, or) where {S} = Size{(S,)}()
31-
size_or(::Type{$(name){S,T}}, or) where {S,T} = (S,)
32-
33-
# Array constructor
34-
function $(name){S}(x::AbstractVector{T}) where {S,T}
35-
@assert S <= length(x)
36-
return $(name){S,T}(ntuple(i -> x[i], Val(S)))
37-
end
38-
39-
function $(name){S,T1}(x::AbstractVector{T2}) where {S,T1,T2}
40-
@assert S <= length(x)
41-
return $(name){S,T1}(ntuple(i -> T1(x[i]), Val(S)))
42-
end
43-
44-
function $(name){S,T}(x) where {S,T}
45-
return $(name){S,T}(ntuple(i -> T(x), Val(S)))
46-
end
47-
48-
$(name){S}(x::T) where {S,T} = $(name){S,T}(ntuple(i -> x, Val(S)))
49-
$(name){1,T}(x::T) where {T} = $(name){1,T}((x,))
50-
$(name)(x::NTuple{S}) where {S} = $(name){S}(x)
51-
function $(name)(x::T) where {S,T<:Tuple{Vararg{Any,S}}}
52-
return $(name){S,StaticArrays.promote_tuple_eltype(T)}(x)
53-
end
54-
55-
function $(name){S}(x::T) where {S,T<:Tuple}
56-
return $(name){S,StaticArrays.promote_tuple_eltype(T)}(x)
57-
end
58-
$(name){S,T}(x::StaticVector) where {S,T} = $(name){S,T}(Tuple(x))
59-
60-
@generated function (::Type{$(name){S,T}})(x::$(name)) where {S,T}
61-
idx = [:(x[$i]) for i in 1:S]
62-
return quote
63-
$($(name)){S,T}($(idx...))
64-
end
65-
end
66-
67-
@generated function Base.convert(::Type{$(name){S,T}},
68-
x::$(name)) where {S,T}
69-
idx = [:(x[$i]) for i in 1:S]
70-
return quote
71-
$($(name)){S,T}($(idx...))
72-
end
73-
end
74-
75-
@generated function (::Type{SV})(x::StaticVector) where {SV<:$(name)}
76-
len = size_or(SV, size(x))[1]
77-
return if length(x) == len
78-
:(SV(Tuple(x)))
79-
elseif length(x) > len
80-
elems = [:(x[$i]) for i in 1:len]
81-
:(SV($(Expr(:tuple, elems...))))
82-
else
83-
error("Static Vector too short: $x, target type: $SV")
84-
end
85-
end
86-
87-
Base.@pure StaticArrays.Size(::Type{$(name){S,Any}}) where {S} = Size(S)
88-
Base.@pure StaticArrays.Size(::Type{$(name){S,T}}) where {S,T} = Size(S)
89-
90-
Base.@propagate_inbounds function Base.getindex(v::$(name){S,T},
91-
i::Int) where {S,T}
92-
return v.data[i]
93-
end
94-
95-
Base.Tuple(v::$(name)) = v.data
96-
function Base.convert(::Type{$(name){S,T}}, x::NTuple{S,T}) where {S,T}
97-
return $(name){S,T}(x)
98-
end
99-
function Base.convert(::Type{$(name){S,T}}, x::Tuple) where {S,T}
100-
return $(name){S,T}(convert(NTuple{S,T}, x))
101-
end
102-
103-
@generated function StaticArrays.similar_type(::Type{SV}, ::Type{T},
104-
s::Size{S}) where {SV<:$(name),
105-
T,S}
106-
return if length(S) === 1
107-
$(name){S[1],T}
108-
else
109-
StaticArrays.default_similar_type(T, s(), Val{length(S)})
110-
end
111-
end
112-
113-
Base.:(*)(a::$name, b::$name) = a .* b
114-
function Base.broadcasted(f, a::AbstractArray{T},
115-
b::$name) where {T<:$name}
116-
return Base.broadcasted(f, a, (b,))
117-
end
11+
struct $(name){S,T} <: $(parent){S,T}
12+
data::NTuple{S,T}
13+
14+
function $(name){S,T}(x::NTuple{S,T}) where {S,T}
15+
return new{S,T}(x)
16+
end
17+
18+
function $(name){S,T}(x::NTuple{S,Any}) where {S,T}
19+
return new{S,T}(StaticArrays.convert_ntuple(T, x))
20+
end
21+
end
22+
23+
size_or(::Type{$(name)}, or) = or
24+
eltype_or(::Type{$(name)}, or) = or
25+
eltype_or(::Type{$(name){S,T} where S}, or) where {T} = T
26+
eltype_or(::Type{$(name){S,T} where T}, or) where {S} = or
27+
eltype_or(::Type{$(name){S,T}}, or) where {S,T} = T
28+
29+
size_or(::Type{$(name){S,T} where S}, or) where {T} = or
30+
size_or(::Type{$(name){S,T} where T}, or) where {S} = Size{(S,)}()
31+
size_or(::Type{$(name){S,T}}, or) where {S,T} = (S,)
32+
33+
# Array constructor
34+
function $(name){S}(x::AbstractVector{T}) where {S,T}
35+
@assert S <= length(x)
36+
return $(name){S,T}(ntuple(i -> x[i], Val(S)))
37+
end
38+
39+
function $(name){S,T1}(x::AbstractVector{T2}) where {S,T1,T2}
40+
@assert S <= length(x)
41+
return $(name){S,T1}(ntuple(i -> T1(x[i]), Val(S)))
42+
end
43+
44+
function $(name){S,T}(x) where {S,T}
45+
return $(name){S,T}(ntuple(i -> T(x), Val(S)))
46+
end
47+
48+
$(name){S}(x::T) where {S,T} = $(name){S,T}(ntuple(i -> x, Val(S)))
49+
$(name){1,T}(x::T) where {T} = $(name){1,T}((x,))
50+
$(name)(x::NTuple{S}) where {S} = $(name){S}(x)
51+
function $(name)(x::T) where {S,T<:Tuple{Vararg{Any,S}}}
52+
return $(name){S,StaticArrays.promote_tuple_eltype(T)}(x)
53+
end
54+
55+
function $(name){S}(x::T) where {S,T<:Tuple}
56+
return $(name){S,StaticArrays.promote_tuple_eltype(T)}(x)
57+
end
58+
$(name){S,T}(x::StaticVector) where {S,T} = $(name){S,T}(Tuple(x))
59+
60+
@generated function (::Type{$(name){S,T}})(x::$(name)) where {S,T}
61+
idx = [:(x[$i]) for i in 1:S]
62+
return quote
63+
$($(name)){S,T}($(idx...))
64+
end
65+
end
66+
67+
@generated function Base.convert(::Type{$(name){S,T}}, x::$(name)) where {S,T}
68+
idx = [:(x[$i]) for i in 1:S]
69+
return quote
70+
$($(name)){S,T}($(idx...))
71+
end
72+
end
73+
74+
@generated function (::Type{SV})(x::StaticVector) where {SV<:$(name)}
75+
len = size_or(SV, size(x))[1]
76+
return if length(x) == len
77+
:(SV(Tuple(x)))
78+
elseif length(x) > len
79+
elems = [:(x[$i]) for i in 1:len]
80+
:(SV($(Expr(:tuple, elems...))))
81+
else
82+
error("Static Vector too short: $x, target type: $SV")
83+
end
84+
end
85+
86+
Base.@pure StaticArrays.Size(::Type{$(name){S,Any}}) where {S} = Size(S)
87+
Base.@pure StaticArrays.Size(::Type{$(name){S,T}}) where {S,T} = Size(S)
88+
89+
Base.@propagate_inbounds function Base.getindex(v::$(name){S,T}, i::Int) where {S,T}
90+
return v.data[i]
91+
end
92+
93+
Base.Tuple(v::$(name)) = v.data
94+
function Base.convert(::Type{$(name){S,T}}, x::NTuple{S,T}) where {S,T}
95+
return $(name){S,T}(x)
96+
end
97+
function Base.convert(::Type{$(name){S,T}}, x::Tuple) where {S,T}
98+
return $(name){S,T}(convert(NTuple{S,T}, x))
99+
end
100+
101+
@generated function StaticArrays.similar_type(::Type{SV}, ::Type{T},
102+
s::Size{S}) where {SV<:$(name),T,S}
103+
return if length(S) === 1
104+
$(name){S[1],T}
105+
else
106+
StaticArrays.default_similar_type(T, s(), Val{length(S)})
107+
end
108+
end
109+
110+
Base.:(*)(a::$name, b::$name) = a .* b
111+
function Base.broadcasted(f, a::AbstractArray{T}, b::$name) where {T<:$name}
112+
return Base.broadcasted(f, a, (b,))
113+
end
118114
end
119115
return esc(expr)
120116
end

src/offsetintegers.jl

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ raw(x::Integer) = x
2020
value(x::OffsetInteger{O,T}) where {O,T} = raw(x) - O
2121
value(x::Integer) = x
2222

23-
function show(io::IO, oi::OffsetInteger{O,T}) where {O,T}
23+
function show(io::IO, oi::OffsetInteger)
2424
return print(io, "|$(raw(oi)) (indexes as $(value(oi))|")
2525
end
2626

@@ -29,23 +29,27 @@ Base.eltype(oi::OffsetInteger) = eltype(typeof(oi))
2929

3030
# constructors and conversion
3131
function OffsetInteger{O1,T1}(x::OffsetInteger{O2,T2}) where {O1,O2,T1<:Integer,T2<:Integer}
32-
return OffsetInteger{O1,T1}(T2(x))
32+
return OffsetInteger{O1,T1}(convert(T2, x))
3333
end
3434

3535
OffsetInteger{O}(x::Integer) where {O} = OffsetInteger{O,eltype(x)}(x)
3636
OffsetInteger{O}(x::OffsetInteger) where {O} = OffsetInteger{O,eltype(x)}(x)
3737
# This constructor has a massive method invalidation as a consequence,
3838
# and doesn't seem to be needed, so let's remove it!
39-
(::Type{IT})(x::OffsetInteger) where {IT<:Integer} = IT(value(x))
4039

41-
Base.@pure pure_max(x1, x2) = x1 > x2 ? x1 : x2
42-
Base.promote_rule(::Type{T1}, ::Type{OffsetInteger{O,T2}}) where {T1<:Integer,O,T2} = T1
40+
Base.convert(::Type{IT}, x::OffsetInteger) where {IT<:Integer} = IT(value(x))
41+
42+
Base.promote_rule(::Type{IT}, ::Type{<:OffsetInteger}) where {IT<:Integer} = IT
43+
4344
function Base.promote_rule(::Type{OffsetInteger{O1,T1}},
44-
::Type{OffsetInteger{O2,T2}}) where {O1,O2,T1,T2}
45+
::Type{OffsetInteger{O2,T2}}) where {O1,O2,T1<:Integer,
46+
T2<:Integer}
4547
return OffsetInteger{pure_max(O1, O2),promote_type(T1, T2)}
4648
end
4749

48-
#Need to convert to Int here because of: https://github.com/JuliaLang/julia/issues/35038
50+
Base.@pure pure_max(x1, x2) = x1 > x2 ? x1 : x2
51+
52+
# Need to convert to Int here because of: https://github.com/JuliaLang/julia/issues/35038
4953
Base.to_index(I::OffsetInteger) = convert(Int, raw(OneIndex(I)))
5054
Base.to_index(I::OffsetInteger{0}) = convert(Int, raw(I))
5155

src/primitives/pyramids.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ struct Pyramid{T} <: GeometryPrimitive{3,T}
44
width::T
55
end
66

7-
function coordinates(p::Pyramid{T}, nvertices=nothing) where {T}
7+
function coordinates(p::Pyramid{T}) where {T}
88
leftup = Point{3,T}(-p.width, p.width, 0) / 2
99
leftdown = Point(-p.width, -p.width, 0) / 2
1010
tip = Point{3,T}(p.middle + Point{3,T}(0, 0, p.length))
@@ -16,6 +16,6 @@ function coordinates(p::Pyramid{T}, nvertices=nothing) where {T}
1616
ld, rd]
1717
end
1818

19-
function faces(r::Pyramid, nvertices=nothing) where {FT}
19+
function faces(::Pyramid)
2020
return (TriangleFace(triangle) for triangle in TupleView{3}(1:18))
2121
end

0 commit comments

Comments
 (0)