Pleasanterのコードスタイル 空白行編

Pleasanter開発チームのいしざきです。

PleasanterはオープンソースのWebデータベースでGitHubにソースが公開されています。

今回はPleasanterへプルリクエスト(PR)する際に気にしたいコードスタイル 空白行編です。

コードの上で空白行というと何を思い浮かべるでしょうか? 詳し方ならリーダブルコード

コードを「段落」に分割する

の節を思い浮かべるかもしれません。リーダブルコードは素晴らしい指針です。しかし世界の全てのプロジェクトが同じルールを採用しているわけではありません。

よく見るスタイルとPleasanterの比較

次の例はよく見るコードルールで書かれたC#クラスです。このクラスがPleasanterではどうなるか見てみましょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace SampleApp
{
    public class PopularStyleClass
    {
        public async Task<string> GetDataFromWeb()
        {
            // Create HttpClient
            var httpClient = CreateHttpClient();
            httpClient.Timeout = new TimeSpan(TimeSpan.TicksPerSecond * 20L);

            // Request Data
            var contentData = "<contentData>";
            var requestContent = new StringContent(contentData);

            // Post
            var responceMessage = 
                await httpClient.PostAsync("<requestUrl>", requestContent);

            // Responce Data
            var responceContent = responceMessage.Content;
            var responceData = await responceContent.ReadAsStringAsync();
            return responceData;
        }

        HttpClient CreateHttpClient()
            => new HttpClient();
    }
}

Pleasanterでは次のようになります。
(※筆者も勉強中のため100%正しいPleasanterのスタイルではないかもしれません。勉強のためにこの記事を書いている面もあります)

using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace SampleApp
{
    public static class PleasanterStyleClass
    {
        public static async Task<string> GetDataFromWeb()
        {
            var hc = CreateHttpClient();
            hc.Timeout = new TimeSpan(ticks: TimeSpan.TicksPerSecond * 20L);
            return await (await hc
                .PostAsync(
                    requestUri: "<requestUrl>",
                    content: new StringContent("<contentData>")))
                .Content
                .ReadAsStringAsync();
        }

        private static HttpClient CreateHttpClient()
        {
            return new HttpClient();
        }
    }
}

Pleasanterの空白行

Pleasanterの空白行はクラスのメンバーとメンバーの間だけです。

usingとnamespaceの間について

よく見るスタイルではusingとnamespaceの間に空白行があります。

using System.Threading.Tasks;

namespace SampleApp

Pleasanterではusingとnamespaceの間に空白はありません。

using System.Threading.Tasks;
namespace SampleApp

メソッド内の段落について

よく見るスタイルではメソッド内に段落の空白行があります。

// Create HttpClient
var httpClient = CreateHttpClient();
httpClient.Timeout = new TimeSpan(TimeSpan.TicksPerSecond * 20L);

// Request Data
var contentData = "<contentData>";

Pleasanterではメソッド内に段落の空白はありません。

var hc = CreateHttpClient();
hc.Timeout = new TimeSpan(ticks: TimeSpan.TicksPerSecond * 20L);
return await (await hc

メソッドとメソッドの間

Pleasanterでは空白はクラスのメンバーとメンバーの間だけです。

        .ReadAsStringAsync();
}

private static HttpClient CreateHttpClient()

PRのお願い

PleasanterへのPRいただける際には空白はメンバーとメンバーの間だけでお願いします。
また、メンバーとメンバーの間以外の空白行やメンバーとメンバーの間に空白行のない箇所を見つけた方、ぜひ修正してPRお願いします。

その他のコードスタイル

今回のコード例だけでも空白行以外にも様々なコードルールが読み取れますが、Pleasanterは日々進化中でPR時のお願い事項などの整備は取り組み中の状態です。

不定期になりますが今後も少しずつこちらのブログで紹介してまいります。今後PRするかもしれないという方、継続してチェックしていただけると嬉しいです。