# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.

style = intellij
danglingParentheses = false
maxColumn = 120
docstrings = JavaDoc
rewrite.rules = [SortImports]
project.git = true
