|
@@ -3,9 +3,11 @@ from __future__ import absolute_import
|
|
|
|
|
|
import os
|
|
|
import sys
|
|
|
+import subprocess
|
|
|
+import json
|
|
|
|
|
|
from glob import glob
|
|
|
-from subprocess import Popen
|
|
|
+from click import echo
|
|
|
|
|
|
from sentry.lint.engine import check_files, get_js_files
|
|
|
|
|
@@ -18,6 +20,7 @@ if 'VIRTUAL_ENV' in os.environ:
|
|
|
'%s/lib/*/site-packages' % os.environ['VIRTUAL_ENV'])[0]
|
|
|
sys.path.insert(0, site_packages)
|
|
|
|
|
|
+PRETTIER_VERSION = "1.2.2"
|
|
|
|
|
|
def js_format(file_list=None):
|
|
|
"""
|
|
@@ -28,16 +31,33 @@ def js_format(file_list=None):
|
|
|
prettier_path = os.path.join(project_root, 'node_modules', '.bin', 'prettier')
|
|
|
|
|
|
if not os.path.exists(prettier_path):
|
|
|
- from click import echo
|
|
|
- echo('!! Skipping JavaScript formatting because prettier is not installed.')
|
|
|
+ echo('!! Skipping JavaScript formatting because prettier is not installed.', err=True)
|
|
|
+ return False
|
|
|
+
|
|
|
+ # Get Prettier version from package.json
|
|
|
+ package_version = None
|
|
|
+ package_json_path = os.path.join(project_root, 'package.json')
|
|
|
+ with open(package_json_path) as package_json:
|
|
|
+ try:
|
|
|
+ package_version = json.load(package_json)['devDependencies']['prettier']
|
|
|
+ except KeyError:
|
|
|
+ echo('!! Prettier missing from package.json', err=True)
|
|
|
+ return False
|
|
|
+
|
|
|
+ prettier_version = subprocess.check_output([prettier_path, '--version']).rstrip()
|
|
|
+ if prettier_version != package_version:
|
|
|
+ echo('!! Prettier is out of date: %s (expected %s). Please run `yarn install`.' \
|
|
|
+ % (prettier_version, package_version), err=True)
|
|
|
return False
|
|
|
|
|
|
js_file_list = get_js_files(file_list)
|
|
|
|
|
|
has_errors = False
|
|
|
if js_file_list:
|
|
|
- status = Popen([prettier_path, '--write', '--single-quote', '--bracket-spacing=false', '--print-width=90']
|
|
|
- + js_file_list).wait()
|
|
|
+ status = subprocess.Popen([prettier_path, '--write', '--single-quote',
|
|
|
+ '--bracket-spacing=false', '--print-width=90', '--jsx-bracket-same-line=true'] +
|
|
|
+ js_file_list
|
|
|
+ ).wait()
|
|
|
has_errors = status != 0
|
|
|
|
|
|
return has_errors
|