SublimeText Configuration for LSST Development

This page will help you configure SublimeText to be consistent with LSST’s coding standards and development practices. We recommend using SublimeText 3, and installing Package Control to manage the many useful SublimeText packages that are available. See the Package Control help for usage, including the command to open the Command Palette on your system. Play with the available color schemes until you find one you prefer: there are many to choose from.

Settings

Here is a suggested settings file that will configure Sublime to match most LSST coding styles, plus some that are personal preference but show some of the settings that can be configured. Particularly important are "detect_indentation": false, and "translate_tabs_to_spaces": true,, which will keep your python and C++ code from gaining tabs. The "rulers" setting doesn’t affect actual indentation, but provides guides to help your own line length formatting.

{
    "bold_folder_labels": true,
    "caret_style": "phase",
    "detect_indentation": false,
    "draw_white_space": "selection",
    "enable_hexadecimal_encoding": false,
    "ensure_newline_at_eof_on_save": true,
    "file_exclude_patterns":
    [
        "*.a",
        "*.class",
        "*.db"
        "*.dll",
        "*.dylib",
        "*.exe",
        "*.idb",
        "*.lib",
        "*.ncb",
        "*.o",
        "*.obj",
        "*.os",
        "*.pdb",
        "*.psd",
        "*.pyc",
        "*.pyo",
        "*.sdf",
        "*.so",
        "*.suo",
        ".DS_Store",
    ],
    "index_exclude_patterns":
    [
    "*.dox",
    "*.html",
    "*.log",
    "*.xml"
    ],
    "folder_exclude_patterns":
    [
        ".git",
        ".hg",
        "__pycache__",
        ".sconf_temp",
        ".svn",
    ],
    "font face": "inconsolata-g",
    "font_options":
    [
        "subpixel_antialias"
    ],
    "font_size": 11,
    "highlight_modified_tabs": true,
    "indent_to_bracket": true,
    "open_files_in_new_window": true,
    "rulers":
    [
        79,
        110
    ],
    "translate_tabs_to_spaces": true,
    "wide_caret": true
}

General

To easily open files in SublimeText from the command-line, there is a subl command-line helper.

Some packages (installable via Package Control) that may help your development include,

  • Git Gutter to put marks next to the line numbers that identify added/modified/removed lines since the last Git commit.
  • OmniMarkupPreviewer to allow live-view of formatted reStructuredText, Markdown, and so on, in a web browser.

C++

The clang-format plugin can help you automatically keep your C++ in line with the DM C++ Style Guide. Once you have clang-format configured on your system, install the Sublime package with the Package Manager: Clang Format.

There are two required settings to make Clang Format find the binary and configuration file: "binary" and "style": "File". On Ubuntu, binary should be clang-format-5.0, while on macOS it should be /usr/local/bin/clang-format if you installed via Homebrew. In addition, you configure your Clang Format (clang-format.sublime-settings) to automatically format on save.

{
    "binary": "clang-format-5.0",
    "format_on_save": true,
    "style": "File"
}

You can also set C++ syntax-specific settings to override the general settings above. Syntax-specific settings are defined by opening a file in the desired language and selecting Preferences -> Settings - Syntax-Specific. For example, to have only one ruler at the C++ boundary:

{
    "rulers": [110]
}

These settings override both user and default settings for the C++ syntax.

Python

The built-in python syntax highlighting works well, but here are some potentially useful customizations:

SublimeLinter-flake8

LSST uses flake8 to check that our python code conforms to our DM Python Style Guide. You can get SublimeText to check your python code inline and mark lines that do not follow our style with the SublimeLinter package. Install SublimeLinter and SublimeLinter-flake8 via Package Control. Use the following configuration to conform to LSST’s python style, to mark failing lines, and to provide a summary of failures on save that will let you go directly to those lines.

You may have to configure your PATH to allow SublimeText to find the flake8 executable.

Note that there are SublimeLinter plugins for other languages (e.g. RestructuredText, yaml, javascript) as well.

{
    "user": {
        "debug": false,
        "delay": 0.25,
        "error_color": "D02000",
        "gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme",
        "gutter_theme_excludes": [],
        "lint_mode": "background",
        "linters": {
            "flake8": {
                "@disable": false,
                "args": [],
                "builtins": "",
                "excludes": [],
                "executable": "",
                "ignore": "E133,E226,E228,E251,N802,N803,N806,W391",
                "jobs": "1",
                "max-complexity": -1,
                "max-line-length": 110,
                "select": "",
                "show-code": false
            },
        },
        "mark_style": "outline",
        "no_column_highlights_line": false,
        "passive_warnings": false,
        "paths": {
            "linux": [],
            "osx": [],
            "windows": []
        },
        "python_paths": {
            "linux": [],
            "osx": [
                ""
            ],
            "windows": []
        },
        "rc_search_limit": 3,
        "shell_timeout": 10,
        "show_errors_on_save": true,
        "show_marks_in_minimap": true,
        "syntax_map": {
            "html (django)": "html",
            "html (rails)": "html",
            "html 5": "html",
            "php": "html",
            "python django": "python"
        },
        "tooltip_fontsize": "1rem",
        "tooltip_theme": "Packages/SublimeLinter/tooltip-themes/Default/Default.tooltip-theme",
        "tooltip_theme_excludes": [],
        "tooltips": false,
        "warning_color": "DDB700",
        "wrap_find": true
    }
}

Python PEP8 Autoformat lets one bulk reformat a number of python files to match a style. Use these settings to match LSST’s python style when auto formatting:

{
    // list codes for fixes; used by --ignore and --select
    "list-fixes": true,
    // do not fix these errors / warnings (e.g. [ "E501" , "E4" , "W"])
    // LSST style;
    "ignore": ["E133", "E226", "E228", "E251", "N802", "N803", "W391"],
    // Maximum line length
    "max-line-length": 110
}

Whitespace

The LSST python style guide follows PEP8, meaning 4-spaces, no TABs. The settings file given above will help you maintain this: SublimeText defaults to 4-stops Tabs.

To help find extra end-of-line spaces, install the Trailing Spaces Package. An example configuration for it:

{
    "trailing_spaces_file_max_size": 100000,
    "trailing_spaces_highlight_color": "invalid",
    "trailing_spaces_include_current_line": false,
    "trailing_spaces_include_empty_lines": true
}