pockestrap

Programmer's memo

最近Swiftを書きはじめた

ポエムです。

TL;DR

背景

バイト先で社内勉強会に参加していたところ、突然Swift部が発足しました。
軽くググったところLinuxでもSwiftが動くことがわかったので、Swift部に参加することにしました。

環境

Swift のインストール

Arch LinuxにSwiftをインストールする - Qiita

最初にこの記事を参考にインストールしました。

しかし、Foundation(Obj-Cの標準ライブラリ?)や、後述するswift-ide-testが必要になったため、swiftパッケージからビルドすることにしました。

Foundationなどを入れるには_experimentalフラグを立てる必要がありそうだったので、PKGBUILDを編集して、_experimentalを1に変更しました。
また、ビルドがコケるようになってしまったため、以下のようなパッチをあててビルドを通しました。テストがコケてた?

diff --git a/src/swift-corelibs-xctest/Sources/XCTest/XCTAssert.swift.orig b/src/swift-corelibs-xctest/Sources/XCTest/XCTAssert.swift
index fc2d099..4e93cd8 100644
--- a/src/swift-corelibs-xctest/Sources/XCTest/XCTAssert.swift.orig
+++ b/src/swift-corelibs-xctest/Sources/XCTest/XCTAssert.swift
@@ -205,7 +205,7 @@ public func XCTAssertLessThanOrEqual<T : Comparable>(@autoclosure expression1: (
 
 public func XCTAssertNil(@autoclosure expression: () -> Any?, @autoclosure _ message: () -> String = "", file: StaticString = __FILE__, line: UInt = __LINE__) {
     let value = expression()
-    _XCTAssert(value == nil, assertion: value == nil ? .Nil(()) : .Nil(value!), message, file: file, line: line)
+    /* _XCTAssert(value == nil, assertion: value == nil ? .Nil(()) : .Nil(value!), message, file: file, line: line) */
 }
 
 public func XCTAssertNotEqual<T : Equatable>(@autoclosure expression1: () -> T?, @autoclosure _ expression2: () -> T?, @autoclosure _ message: () -> String = "", file: StaticString = __FILE__, line: UInt = __LINE__) {

コマンドラインツールを作った

Swift に慣れるための一歩として、コマンドラインツールを一つ作りました。

github.com

Markdown からheaderを抽出して、目次を生成するツールです。
ちゃんとheaderに対応するアンカーもつけてくれます。

例えば、lemonade のREADMEで試してみると、こんな感じになります。

$ md-toc < lemonade/README.md
- [Lemonade](#lemonade)
  - [Installation](#installation)
  - [Example of use](#example-of-use)
  - [Usage](#usage)
    - [On server (in the above, Windows)](#on-server-in-the-above-windows)
    - [Client (in the above, Linux)](#client-in-the-above-linux)
  - [Configuration](#configuration)
    - [Server](#server)
    - [Client](#client)
  - [Advanced Usage](#advanced-usage)
    - [trans-loopback](#trans-loopback)
    - [trans-localfile](#trans-localfile)
    - [line-ending](#line-ending)
    - [Alias](#alias)
  - [Links](#links)

Linux上のVimSwiftのオムニ補完出来るようにした

OS X ではSourceKittenというツールのフロントプラグインが使えるようなのですが、Linuxでは難しい?無理?なようです。
ググっていたところ、swift-ide-testというツールを使用して、LinuxSwiftの補完を行っている例が見つかりました。

と言うことで、これを使用してオムニ補完を行うVimプラグインを作ってみました。

github.com

1462416852

1462416702

まだかなり荒削りですが、ないよりかなりマシ。

まとめ

多分Mac使うべきなんだと思う。