Skip to content

Commit

Permalink
apacheGH-38132:Add linting to swift CI and fix linting errors
Browse files Browse the repository at this point in the history
  • Loading branch information
abandy committed Oct 8, 2023
1 parent 3697bcd commit 9f0fa0e
Show file tree
Hide file tree
Showing 40 changed files with 893 additions and 797 deletions.
11 changes: 8 additions & 3 deletions ci/docker/ubuntu-swift.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,15 @@
# specific language governing permissions and limitations
# under the License.

FROM swift:5.7.3

FROM ghcr.io/realm/swiftlint:latest

# Install golang
RUN apt-get update -y -q && \
apt-get install -y -q --no-install-recommends \
golang-go && \
apt-get clean
golang-go && \
apt-get clean

FROM swift:5.9.0 as builder
WORKDIR /root
COPY . .
12 changes: 12 additions & 0 deletions ci/scripts/swift_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@ go run main.go
cp *.arrow ../../Arrow
popd

source_dir=${1}/swift/Arrow
pushd ${source_dir}
swiftlint ${1}/Sources/Arrow/*.swift
swiftlint ${1}/Tests/ArrowTests/*.swift
popd

source_dir=${1}/swift/ArrowFlight
pushd ${source_dir}
swiftlint ${1}/Sources/ArrowFlight/*.swift
swiftlint ${1}/Tests/ArrowFlightTests/*.swift
popd

source_dir=${1}/swift/Arrow
pushd ${source_dir}
swift test
Expand Down
11 changes: 11 additions & 0 deletions swift/Arrow/.swiftlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
included:
- Sources
excluded:
- Sources/Arrow/File_generated.swift
- Sources/Arrow/Message_generated.swift
- Sources/Arrow/Schema_generated.swift
- Sources/Arrow/SparseTensor_generated.swift
- Sources/Arrow/Tensor_generated.swift
identifier_name:
min_length: 2 # only warning
allow_zero_lintable_files: false
165 changes: 78 additions & 87 deletions swift/Arrow/Sources/Arrow/ArrowArray.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ public class ArrowArrayHolder {
buffer.append(to: &bufferData[bufferData.count - 1])
}

return bufferData;
return bufferData
}

self.getBufferDataSizes = {() -> [Int] in
var bufferDataSizes = [Int]()
for buffer in arrowArray.arrowData.buffers {
Expand All @@ -48,20 +48,22 @@ public class ArrowArrayHolder {

return bufferDataSizes
}

self.getArrowColumn = {(field: ArrowField, arrayHolders: [ArrowArrayHolder]) throws -> ArrowColumn in
var arrays = [ArrowArray<T>]()
for arrayHolder in arrayHolders {
if let array = arrayHolder.array as? ArrowArray<T> {
arrays.append(array)
}
}

return ArrowColumn(field, chunked: ChunkedArrayHolder(try ChunkedArray<T>(arrays)))
}
}

public static func makeArrowColumn(_ field: ArrowField, holders: [ArrowArrayHolder]) -> Result<ArrowColumn, ArrowError> {

public static func makeArrowColumn(_ field: ArrowField,
holders: [ArrowArrayHolder]
) -> Result<ArrowColumn, ArrowError> {
do {
return .success(try holders[0].getArrowColumn(field, holders))
} catch {
Expand All @@ -73,9 +75,9 @@ public class ArrowArrayHolder {
public class ArrowArray<T>: AsString {
public typealias ItemType = T
public let arrowData: ArrowData
public var nullCount : UInt {get{return self.arrowData.nullCount}}
public var length: UInt {get{return self.arrowData.length}}
public var nullCount: UInt {return self.arrowData.nullCount}
public var length: UInt {return self.arrowData.length}

public required init(_ arrowData: ArrowData) {
self.arrowData = arrowData
}
Expand All @@ -84,102 +86,92 @@ public class ArrowArray<T>: AsString {
if at >= self.length {
throw ArrowError.outOfBounds(index: Int64(at))
}

return self.arrowData.isNull(at)
}

public subscript(_ index: UInt) -> T? {
get {
fatalError("subscript() has not been implemented")
}
fatalError("subscript() has not been implemented")
}

public func asString(_ index: UInt) -> String {
if self[index] == nil {
return ""
}

return "\(self[index]!)"
}
}

public class FixedArray<T>: ArrowArray<T> {
public override subscript(_ index: UInt) -> T? {
get {
if self.arrowData.isNull(index) {
return nil
}

let byteOffset = self.arrowData.stride * Int(index);
return self.arrowData.buffers[1].rawPointer.advanced(by: byteOffset).load(as: T.self)
if self.arrowData.isNull(index) {
return nil
}

let byteOffset = self.arrowData.stride * Int(index)
return self.arrowData.buffers[1].rawPointer.advanced(by: byteOffset).load(as: T.self)
}
}

public class StringArray: ArrowArray<String> {
public override subscript(_ index: UInt) -> String? {
get {
let offsetIndex = MemoryLayout<Int32>.stride * Int(index)
if self.arrowData.isNull(index) {
return nil
}

let offsets = self.arrowData.buffers[1]
let values = self.arrowData.buffers[2]
let offsetIndex = MemoryLayout<Int32>.stride * Int(index)
if self.arrowData.isNull(index) {
return nil
}

var startIndex: Int32 = 0
if index > 0 {
startIndex = offsets.rawPointer.advanced(by: offsetIndex).load(as: Int32.self)
}
let offsets = self.arrowData.buffers[1]
let values = self.arrowData.buffers[2]

let endIndex = offsets.rawPointer.advanced(by: offsetIndex + MemoryLayout<Int32>.stride ).load(as: Int32.self)
let arrayLength = Int(endIndex - startIndex);
let rawPointer = values.rawPointer.advanced(by: Int(startIndex)).bindMemory(to: UInt8.self, capacity: arrayLength)
let buffer = UnsafeBufferPointer<UInt8>(start: rawPointer, count: arrayLength);
let byteArray = Array(buffer)
return String(data: Data(byteArray), encoding: .utf8)
var startIndex: Int32 = 0
if index > 0 {
startIndex = offsets.rawPointer.advanced(by: offsetIndex).load(as: Int32.self)
}

let endIndex = offsets.rawPointer.advanced(by: offsetIndex + MemoryLayout<Int32>.stride )
.load(as: Int32.self)
let arrayLength = Int(endIndex - startIndex)
let rawPointer = values.rawPointer.advanced(by: Int(startIndex))
.bindMemory(to: UInt8.self, capacity: arrayLength)
let buffer = UnsafeBufferPointer<UInt8>(start: rawPointer, count: arrayLength)
let byteArray = Array(buffer)
return String(data: Data(byteArray), encoding: .utf8)
}
}

public class BoolArray: ArrowArray<Bool> {
public override subscript(_ index: UInt) -> Bool? {
get {
if self.arrowData.isNull(index) {
return nil
}

let valueBuffer = self.arrowData.buffers[1];
return BitUtility.isSet(index, buffer: valueBuffer)
if self.arrowData.isNull(index) {
return nil
}

let valueBuffer = self.arrowData.buffers[1]
return BitUtility.isSet(index, buffer: valueBuffer)
}
}

public class Date32Array: ArrowArray<Date> {
public override subscript(_ index: UInt) -> Date? {
get {
if self.arrowData.isNull(index) {
return nil
}

let byteOffset = self.arrowData.stride * Int(index);
let milliseconds = self.arrowData.buffers[1].rawPointer.advanced(by: byteOffset).load(as: UInt32.self)
return Date(timeIntervalSince1970: TimeInterval(milliseconds * 86400))
if self.arrowData.isNull(index) {
return nil
}

let byteOffset = self.arrowData.stride * Int(index)
let milliseconds = self.arrowData.buffers[1].rawPointer.advanced(by: byteOffset).load(as: UInt32.self)
return Date(timeIntervalSince1970: TimeInterval(milliseconds * 86400))
}
}

public class Date64Array: ArrowArray<Date> {
public override subscript(_ index: UInt) -> Date? {
get {
if self.arrowData.isNull(index) {
return nil
}

let byteOffset = self.arrowData.stride * Int(index);
let milliseconds = self.arrowData.buffers[1].rawPointer.advanced(by: byteOffset).load(as: UInt64.self)
return Date(timeIntervalSince1970: TimeInterval(milliseconds / 1000))
if self.arrowData.isNull(index) {
return nil
}

let byteOffset = self.arrowData.stride * Int(index)
let milliseconds = self.arrowData.buffers[1].rawPointer.advanced(by: byteOffset).load(as: UInt64.self)
return Date(timeIntervalSince1970: TimeInterval(milliseconds / 1000))
}
}

Expand All @@ -189,40 +181,39 @@ public class Time64Array: FixedArray<Time64> {}
public class BinaryArray: ArrowArray<Data> {
public struct Options {
public var printAsHex = false
public var printEncoding: String.Encoding = .utf8;
public var printEncoding: String.Encoding = .utf8
}

public var options = Options()

public override subscript(_ index: UInt) -> Data? {
get {
let offsetIndex = MemoryLayout<Int32>.stride * Int(index)
if self.arrowData.isNull(index) {
return nil
}

let offsets = self.arrowData.buffers[1]
let values = self.arrowData.buffers[2]

var startIndex: Int32 = 0
if index > 0 {
startIndex = offsets.rawPointer.advanced(by: offsetIndex).load(as: Int32.self)
}
public override subscript(_ index: UInt) -> Data? {
let offsetIndex = MemoryLayout<Int32>.stride * Int(index)
if self.arrowData.isNull(index) {
return nil
}

let endIndex = offsets.rawPointer.advanced(by: offsetIndex + MemoryLayout<Int32>.stride ).load(as: Int32.self)
let arrayLength = Int(endIndex - startIndex);
let rawPointer = values.rawPointer.advanced(by: Int(startIndex)).bindMemory(to: UInt8.self, capacity: arrayLength)
let buffer = UnsafeBufferPointer<UInt8>(start: rawPointer, count: arrayLength);
let byteArray = Array(buffer)
return Data(byteArray)
let offsets = self.arrowData.buffers[1]
let values = self.arrowData.buffers[2]
var startIndex: Int32 = 0
if index > 0 {
startIndex = offsets.rawPointer.advanced(by: offsetIndex).load(as: Int32.self)
}

let endIndex = offsets.rawPointer.advanced(by: offsetIndex + MemoryLayout<Int32>.stride )
.load(as: Int32.self)
let arrayLength = Int(endIndex - startIndex)
let rawPointer = values.rawPointer.advanced(by: Int(startIndex))
.bindMemory(to: UInt8.self, capacity: arrayLength)
let buffer = UnsafeBufferPointer<UInt8>(start: rawPointer, count: arrayLength)
let byteArray = Array(buffer)
return Data(byteArray)
}

public override func asString(_ index: UInt) -> String {
if self[index] == nil {
return ""
}

let data = self[index]!
if options.printAsHex {
return data.hexEncodedString()
Expand Down
Loading

0 comments on commit 9f0fa0e

Please sign in to comment.