This Confluence has been LDAP enabled, if you are an ASF Committer, please use your LDAP Credentials to login. Any problems file an INFRA jira ticket please.

Page tree
Skip to end of metadata
Go to start of metadata

All languages:

  • All source files should include the standard Apache license header.
  • All lines should be limited to 90 characters in width
  • Remove trailing whitespace. To automate this, install pre-commit.sh into .git/hooks/pre-commit and make it executable.

C++

See the C++ Style Guide

Java

  • Currently undocumented - new code should follow existing style conventions. Note that you should use clang-format to automatically reformat Java code, as described in the C++ Style Guide

Thrift

We don't have a formal style guide, but we do adhere to a few conventions:

  • Structs
    • Struct names begin with a "T", and use a capital letter for each new word, with no underscores.
    • All fields should be declared as either optional or required
    • Don't use semicolons after struct member declarations; they're optional, so we optimize for typing efficiency.
  • Functions
    • Function names start with a capital letter and have a capital letter for each new word, with no underscores.
    • Each function should take exactly one parameter, named FunctionNameParameter, and should return either void or FunctionNameResponse. This convention allows incremental updates.
  • Parameters
    • Parameter names use camel case (with no underscores).
  • Services
    • Service names should end in the word "Service"

Here's an example:

service MetadataRepositoryService {
  TRegisterResponse Register(1: TRegisterRequest request);
}

struct TRegisterRequest {
  1: required list<string> applicationIds
  2: required TNetworkAddress address
}

struct TRegisterResponse {
  1: required set<TMetadatum> metadata
}

 

Python

When editing existing code, you should follow existing code style in the file you are editing. In general, our code tries to follow PEP8 style with some exceptions:

  • We wrap lines at 90 characters (instead of 80)
  • We use 2 spaces indent (instead of 4)

We automatically run flake8-diff on jobs pre-commit to report style violations on lines that patches modify. It is configured using setup.cfg in the Impala repository.

You can run flake8 in several ways. Note that a lot of existing Python code in Impala doesn't meet our current style standards. We fix such issues incrementally when we modify the code.

# Works in an Impala development environment. Lists all violations for a file or subdirectory.
impala-flake8 <path to file>

# Show newly introduced violations for your current HEAD commit in git.
# Requires you to install flake8-diff separately.
flake8-diff HEAD^ HEAD

# Generate the same violations as the Impala jenkins bot for your current HEAD commit in git.
./bin/jenkins/critique-gerrit-review.py --dryrun


The following tools have also been found useful by developers to scan and/or automatically fix formatting issues:

  • pycodestyle (formerly known as pep8) - A checker for PEP8 conformance
  • autopep8 - A tool that automatically formats code to conform with PEP8
  • vim-syntastic - A plugin for vim that can highlight style violations

All tools above can be used with the same configuration file. As a starting point, consider using this one:

[pep8]
# E101 - Reindent all lines.
# E111 - indentation is not a multiple of four
# E114 - indentation is not a multiple of four (comment)
# E251 - Remove whitespace around parameter '=' sign.
# E301 - Add missing blank line.
ignore = E101,E111,E114,E251,E301
max-line-length = 90

 

 

 

  

  • No labels