Coding Standards

pgAdminは複数のテクノロジーと複数の言語を使用しており、それぞれに独自のコーディング標準があります。

全般

すべての言語において、インデントは4つのスペースで作成し、必要に応じて過度に長い行を折り返して、より小さなディスプレイで読めるようにする必要があります(80文字が多くの場所で使用されていますが、これは必要な最大サイズではありません現代のディスプレイ)。通常、行は120文字以下にする必要があります。

コメントは、コード自体の簡単なレビューから明らかでない場合、その目的またはどのように機能するかを説明する必要がある場合、すべてのコードに含める必要があります。

CSS3

CSS3は、アプリケーション全体のスタイルとレイアウトに使用されます。そのプロセスを支援するためにBootstrapフレームワークが広範囲に使用されていますが、追加のスタイルを時々作成する必要があります。

ほとんどのカスタムスタイリングは、フックを介してロードしているモジュールに含まれるように静的スタイルシートをアドバタイズする個々のモジュールから来ます。

スタイリングのオーバーライド(たとえば、Bootstrapのルックアンドフィールを変更するため)は、通常、アプリケーションのメインの静的ファイルディレクトリにある overrides.css ファイルにあります。

スタイリングは、HTMLのインラインで、常に外部スタイルシートを介して適用しないでください。スタイルの使用法または目的を説明するコメントを必要に応じて含める必要があります。

スタイルは、1行に1つずつ明確に指定する必要があります。例:

/* iFrames should have no border */
iframe {
    border-width: 0;
}

/* Ensure the codemirror editor displays full height gutters when resized */
.CodeMirror, .CodeMirror-gutters {
    height: 100% !important;
}

すべてのスタイルシートは、CSS3に準拠している必要があります。

HTML5

HTML5は、アプリケーション全体のページ構造に使用され、ほとんどの場合、FlaskのJinja2テンプレートエンジンによってテンプレートからレンダリングされます。

すべてのHTMLはHTML5に準拠している必要があります。

Javascript

クライアント側のコードは、jQueryとさまざまなプラグインを使用してJavascriptで記述されます。コードの多くは静的ファイルからレンダリングされますが、Jinja2を使用してテンプレートからレンダリングされるコード(多くの場合、ユーザー設定を注入するため)、またはモジュールフックからその場で構築されるコードもあります。

典型的なJavascript関数は次のようにフォーマットされます(これはテンプレートからの抜粋です)。

// Delete a server group
function delete_server_group(item) {
    alertify.confirm(
        'Delete server group?',
        'Are you sure you wish to delete the server group "{0}"?'.replace('{0}', tree.getLabel(item)),
        function() {
            var id = tree.getId(item)
            $.post("{{ url_for('NODE-server-group.delete') }}", { id: id })
                .done(function(data) {
                    if (data.success == 0) {
                        report_error(data.errormsg, data.info);
                    } else {
                        var next = tree.next(item);
                        var prev = tree.prev(item);
                        tree.remove(item);
                        if (next.length) {
                            tree.select(next);
                        } else if (prev.length) {
                            tree.select(prev);
                        }
                    }
                }
            )
        },
        null
    )
}

アンダースコア文字を使用してすべての小文字の単語を区切り、短いが説明的な小文字の変数名を使用して、説明的な関数名を使用することに注意してください。

注釈

バージョン3.0以降、新しいコードまたはリファクタリングされたコードは、ES6の機能と規則を使用して記述する必要があります。

Python

バックエンドのWebサーバーにはPythonを使用しています。すべてのコードはPython2.7と互換性がある必要があり、 PEP 8 で定義された公式のPythonコーディング標準に従いながら、PyDocコメントを含める必要があります。必要なファイルヘッダーとともに関数の例を以下に示します。

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################

"""Integration hooks for server groups."""

from flask import render_template, url_for
from flask.ext.security import current_user

from pgadmin.settings.settings_model import db, ServerGroup

def get_nodes():
    """Return a JSON document listing the server groups for the user"""
    groups = ServerGroup.query.filter_by(user_id=current_user.id)

    value = ''
    for group in groups:
        value += '{"id":%d,"label":"%s","icon":"icon-server-group","inode":true},' \
                 % (group.id, group.name)

    value = value[:-1]

    return value