Skip to content

Commit

Permalink
eslint: Fix how we break lines at operators.
Browse files Browse the repository at this point in the history
This is something Prettier gets wrong, but thanks to prettier-eslint
we can now fix.

prettier-eslint internally consists of two steps: prettier, and
`eslint --fix`.  When the latter fixes a case of this, it can make the
later line a few characters longer.  That causes me to notice that
we're trying to have ESLint enforce a max line length, because we have
one spot where it causes a lint error.  So also turn that off, in
favor of letting prettier do prettier's job.

This change is entirely mechanical outside of the ESLint config;
just reran `yarn run prettier`, which runs prettier-eslint.
  • Loading branch information
gnprice committed May 31, 2018
1 parent 2cbdee6 commit 13530c3
Show file tree
Hide file tree
Showing 20 changed files with 130 additions and 114 deletions.
16 changes: 16 additions & 0 deletions .eslintrc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ rules:
new-cap: [error, {capIsNew: false}]
comma-dangle: [error, always-multiline]
quote-props: off
max-len: off # This is prettier's job.
indent: off
arrow-parens: off
no-confusing-arrow: off
Expand All @@ -40,6 +41,21 @@ rules:
nonblock-statement-body-position: [error, below]
curly: [error, all]

# When breaking a line at a binary operator, the operator goes
# at the start of a line, not the end. This makes it much more
# conspicuous whether we're using e.g. `&&` or `||`.
operator-linebreak:
- error
- before
- overrides:
# Assignment operators are a very different beast, which it would make
# no sense to format this way.
"=": after
"+=": after
"-=": after
# ... There are 10 other assignment operators in JavaScript;
# if they come up, add them.

# Tricky code. We repeal several bans from the Airbnb style.
no-bitwise: off
no-continue: off
Expand Down
6 changes: 3 additions & 3 deletions src/events/eventMiddleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ export default (state: GlobalState, event: Object) => {
const activeAccount = getActiveAccount(state);
const { narrow } = getChatScreenParams(state);
const isUserInSameNarrow =
activeAccount &&
(narrow !== undefined && // chat screen is not at top
(!isHomeNarrow(narrow) && isMessageInNarrow(event.message, narrow, activeAccount.email)));
activeAccount
&& (narrow !== undefined // chat screen is not at top
&& (!isHomeNarrow(narrow) && isMessageInNarrow(event.message, narrow, activeAccount.email)));
const isSenderSelf = getOwnEmail(state) === event.message.sender_email;
if (!isUserInSameNarrow && !isSenderSelf) {
playMessageSound();
Expand Down
4 changes: 2 additions & 2 deletions src/message/fetchActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,8 @@ export const fetchEssentialInitialData = () => async (dispatch: Dispatch, getSta
const narrow = getTopMostNarrow(getState());
const [initData, messages] = await Promise.all([
await tryUntilSuccessful(() => registerForEvents(auth)),
narrow &&
(await tryUntilSuccessful(() => getMessages(auth, narrow, 0, halfCount, halfCount, true))),
narrow
&& (await tryUntilSuccessful(() => getMessages(auth, narrow, 0, halfCount, halfCount, true))),
]);

timing.end('Essential server data');
Expand Down
48 changes: 24 additions & 24 deletions src/message/messageUpdates.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,27 @@ export const getMessageTransitionProps = (prevProps: Props, nextProps: Props): T
const allNewMessages =
sameNarrow && prevProps.messages.length === 0 && nextProps.messages.length > 0;
const oldMessagesAdded =
sameNarrow &&
prevProps.messages.length > 0 &&
nextProps.messages.length > 0 &&
prevProps.messages[0].id > nextProps.messages[0].id;
sameNarrow
&& prevProps.messages.length > 0
&& nextProps.messages.length > 0
&& prevProps.messages[0].id > nextProps.messages[0].id;
const newMessagesAdded =
sameNarrow &&
prevProps.messages.length > 0 &&
nextProps.messages.length > 0 &&
prevProps.messages[prevProps.messages.length - 1].id <
nextProps.messages[nextProps.messages.length - 1].id;
sameNarrow
&& prevProps.messages.length > 0
&& nextProps.messages.length > 0
&& prevProps.messages[prevProps.messages.length - 1].id
< nextProps.messages[nextProps.messages.length - 1].id;
const onlyOneNewMessage =
sameNarrow &&
prevProps.messages.length > 0 &&
nextProps.messages.length > 1 &&
prevProps.messages[prevProps.messages.length - 1].id ===
nextProps.messages[nextProps.messages.length - 2].id;
sameNarrow
&& prevProps.messages.length > 0
&& nextProps.messages.length > 1
&& prevProps.messages[prevProps.messages.length - 1].id
=== nextProps.messages[nextProps.messages.length - 2].id;
const messagesReplaced =
sameNarrow &&
prevProps.messages.length > 0 &&
nextProps.messages.length > 0 &&
prevProps.messages[prevProps.messages.length - 1].id < nextProps.messages[0].id;
sameNarrow
&& prevProps.messages.length > 0
&& nextProps.messages.length > 0
&& prevProps.messages[prevProps.messages.length - 1].id < nextProps.messages[0].id;

return {
sameNarrow,
Expand All @@ -66,15 +66,15 @@ export const getMessageUpdateStrategy = (transitionProps: TransitionProps): Upda
if (transitionProps.noMessages) {
return 'replace';
} else if (
!transitionProps.sameNarrow ||
transitionProps.allNewMessages ||
transitionProps.messagesReplaced
!transitionProps.sameNarrow
|| transitionProps.allNewMessages
|| transitionProps.messagesReplaced
) {
return 'scroll-to-anchor';
} else if (
transitionProps.noNewMessages ||
transitionProps.oldMessagesAdded ||
(transitionProps.newMessagesAdded && !transitionProps.onlyOneNewMessage)
transitionProps.noNewMessages
|| transitionProps.oldMessagesAdded
|| (transitionProps.newMessagesAdded && !transitionProps.onlyOneNewMessage)
) {
return 'preserve-position';
} else if (transitionProps.onlyOneNewMessage) {
Expand Down
12 changes: 6 additions & 6 deletions src/message/renderMessages.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ export default (messages: Message[], narrow: Narrow): RenderedSectionDescriptor[
return messages.reduce(
(sections, item) => {
const diffDays =
prevItem &&
!isSameDay(new Date(prevItem.timestamp * 1000), new Date(item.timestamp * 1000));
prevItem
&& !isSameDay(new Date(prevItem.timestamp * 1000), new Date(item.timestamp * 1000));
if (!prevItem || diffDays) {
sections[sections.length - 1].data.push({
key: `time${item.timestamp}`,
Expand All @@ -30,10 +30,10 @@ export default (messages: Message[], narrow: Narrow): RenderedSectionDescriptor[
});
}
const shouldGroupWithPrev =
!diffRecipient &&
!diffDays &&
prevItem &&
prevItem.sender_full_name === item.sender_full_name;
!diffRecipient
&& !diffDays
&& prevItem
&& prevItem.sender_full_name === item.sender_full_name;

sections[sections.length - 1].data.push({
key: item.id,
Expand Down
4 changes: 2 additions & 2 deletions src/nav/ModalSearchNavBar.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ class ModalSearchNavBar extends PureComponent<Props, State> {
<Label style={textStyle} text={title} />
)}
{!showSearchInput && <NavButton name="search" onPress={this.enableSearchActiveState} />}
{showSearchInput &&
clearSearchInput && (
{showSearchInput
&& clearSearchInput && (
<NavButton
name="md-add"
style={localStyles.buttonCancel}
Expand Down
10 changes: 5 additions & 5 deletions src/nav/navSelectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ export const getSameRoutesAndParamsCount = createSelector(getNav, nav => {
let i = nav.routes.length - 1;
while (i >= 0) {
if (
nav.routes[i].routeName !== nav.routes[nav.routes.length - 1].routeName ||
!isEqual(nav.routes[i].params, nav.routes[nav.routes.length - 1].params)
nav.routes[i].routeName !== nav.routes[nav.routes.length - 1].routeName
|| !isEqual(nav.routes[i].params, nav.routes[nav.routes.length - 1].params)
) {
break;
}
Expand Down Expand Up @@ -58,9 +58,9 @@ export const getPreviousDifferentRouteAndParams = createSelector(getNav, nav =>

let i = nav.routes.length - 2;
while (
i >= 0 &&
nav.routes[i].routeName === nav.routes[nav.routes.length - 1].routeName &&
isEqual(nav.routes[i].params, nav.routes[nav.routes.length - 1].params)
i >= 0
&& nav.routes[i].routeName === nav.routes[nav.routes.length - 1].routeName
&& isEqual(nav.routes[i].params, nav.routes[nav.routes.length - 1].params)
) {
i--;
}
Expand Down
12 changes: 6 additions & 6 deletions src/start/AuthScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ class AuthScreen extends PureComponent<Props> {

// callback format expected: zulip://login?realm={}&email={}&otp_encrypted_api_key={}
if (
url.host === 'login' &&
url.query.realm === realm &&
otp &&
url.query.email &&
url.query.otp_encrypted_api_key &&
url.query.otp_encrypted_api_key.length === otp.length
url.host === 'login'
&& url.query.realm === realm
&& otp
&& url.query.email
&& url.query.otp_encrypted_api_key
&& url.query.otp_encrypted_api_key.length === otp.length
) {
const apiKey = extractApiKey(url.query.otp_encrypted_api_key, otp);
actions.loginSuccess(realm, url.query.email, apiKey);
Expand Down
6 changes: 3 additions & 3 deletions src/start/PasswordAuthScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@ class PasswordAuthView extends PureComponent<Props, State> {
const { requireEmailFormat } = this.props.navigation.state.params;
const { email, password, progress, error } = this.state;
const isButtonDisabled =
password.length === 0 ||
email.length === 0 ||
(requireEmailFormat && !isValidEmailFormat(email));
password.length === 0
|| email.length === 0
|| (requireEmailFormat && !isValidEmailFormat(email));

return (
<Screen title="Log in" centerContent padding keyboardShouldPersistTaps="always">
Expand Down
4 changes: 2 additions & 2 deletions src/start/RealmScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,6 @@ class RealmScreen extends PureComponent<Props, State> {

export default connectWithActions((state, props) => ({
initialRealm:
(props.navigation && props.navigation.state.params && props.navigation.state.params.realm) ||
'',
(props.navigation && props.navigation.state.params && props.navigation.state.params.realm)
|| '',
}))(RealmScreen);
4 changes: 2 additions & 2 deletions src/start/authentications.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,6 @@ const authentications = [
export const activeAuthentications = (authenticationMethods: AuthenticationMethods) =>
authentications.filter(
auth =>
authenticationMethods[auth.method] &&
(auth.method !== 'ldap' || !authenticationMethods.password),
authenticationMethods[auth.method]
&& (auth.method !== 'ldap' || !authenticationMethods.password),
);
10 changes: 5 additions & 5 deletions src/streams/StreamItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,11 @@ export default class StreamItem extends PureComponent<Props> {
];
const iconColor = isSelected
? 'white'
: color ||
foregroundColorFromBackground(
backgroundColor || // $FlowFixMe
(StyleSheet.flatten(styles.backgroundColor) || {}).backgroundColor ||
null,
: color
|| foregroundColorFromBackground(
backgroundColor // $FlowFixMe
|| (StyleSheet.flatten(styles.backgroundColor) || {}).backgroundColor
|| null,
);
const textColorStyle = isSelected
? { color: 'white' }
Expand Down
16 changes: 8 additions & 8 deletions src/users/userHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,18 @@ const statusOrder = (presence: Presence): number => {
export const sortUserList = (users: any[], presences: PresenceState): User[] =>
[...users].sort(
(x1, x2) =>
statusOrder(presences[x1.email]) - statusOrder(presences[x2.email]) ||
x1.full_name.toLowerCase().localeCompare(x2.full_name.toLowerCase()),
statusOrder(presences[x1.email]) - statusOrder(presences[x2.email])
|| x1.full_name.toLowerCase().localeCompare(x2.full_name.toLowerCase()),
);

export const filterUserList = (users: User[], filter: string = '', ownEmail: ?string): User[] =>
users.length > 0
? users.filter(
user =>
user.email !== ownEmail &&
(filter === '' ||
user.full_name.toLowerCase().includes(filter.toLowerCase()) ||
user.email.toLowerCase().includes(filter.toLowerCase())),
user.email !== ownEmail
&& (filter === ''
|| user.full_name.toLowerCase().includes(filter.toLowerCase())
|| user.email.toLowerCase().includes(filter.toLowerCase())),
)
: users;

Expand All @@ -79,8 +79,8 @@ export const filterUserByInitials = (
): User[] =>
users.filter(
user =>
user.email !== ownEmail &&
user.full_name
user.email !== ownEmail
&& user.full_name
.replace(/(\s|[a-z])/g, '')
.toLowerCase()
.startsWith(filter.toLowerCase()),
Expand Down
8 changes: 4 additions & 4 deletions src/utils/message.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ export const isSameRecipient = (message1: Message, message2: Message): boolean =
switch (message1.type) {
case 'private':
return (
normalizeRecipients(message1.display_recipient).toLowerCase() ===
normalizeRecipients(message2.display_recipient).toLowerCase()
normalizeRecipients(message1.display_recipient).toLowerCase()
=== normalizeRecipients(message2.display_recipient).toLowerCase()
);
case 'stream':
return (
message1.display_recipient.toLowerCase() === message2.display_recipient.toLowerCase() &&
message1.subject.toLowerCase() === message2.subject.toLowerCase()
message1.display_recipient.toLowerCase() === message2.display_recipient.toLowerCase()
&& message1.subject.toLowerCase() === message2.subject.toLowerCase()
);
case 'outbox': {
return message2.isOutbox;
Expand Down
8 changes: 4 additions & 4 deletions src/utils/misc.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ export const removeEmptyValues = (obj: Object): Object => {
};

export const isStateGoingBack = (cur: GlobalState, prev: GlobalState): boolean =>
cur.nav.routes.length < prev.nav.routes.length ||
cur.nav.isTransitioning ||
prev.nav.isTransitioning ||
isEqual(cur, prev);
cur.nav.routes.length < prev.nav.routes.length
|| cur.nav.isTransitioning
|| prev.nav.isTransitioning
|| isEqual(cur, prev);

export const groupItemsById = (items: ObjectWithId[]): ObjectsMappedById =>
items.reduce((itemsById, item) => {
Expand Down
38 changes: 19 additions & 19 deletions src/utils/narrow.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ export const privateNarrow = (email: string): Narrow => [
];

export const isPrivateNarrow = (narrow: Narrow): boolean =>
Array.isArray(narrow) &&
narrow.length === 1 &&
narrow[0].operator === 'pm-with' &&
narrow[0].operand.indexOf(',') === -1;
Array.isArray(narrow)
&& narrow.length === 1
&& narrow[0].operator === 'pm-with'
&& narrow[0].operand.indexOf(',') === -1;

export const groupNarrow = (emails: string[]): Narrow => [
{
Expand All @@ -33,10 +33,10 @@ export const groupNarrow = (emails: string[]): Narrow => [
];

export const isGroupNarrow = (narrow: Narrow): boolean =>
Array.isArray(narrow) &&
narrow.length === 1 &&
narrow[0].operator === 'pm-with' &&
narrow[0].operand.indexOf(',') >= 0;
Array.isArray(narrow)
&& narrow.length === 1
&& narrow[0].operator === 'pm-with'
&& narrow[0].operand.indexOf(',') >= 0;

export const isPrivateOrGroupNarrow = (narrow: Narrow): boolean =>
Array.isArray(narrow) && narrow.length === 1 && narrow[0].operator === 'pm-with';
Expand All @@ -56,10 +56,10 @@ export const allPrivateNarrow = specialNarrow('private');
export const allPrivateNarrowStr = JSON.stringify(allPrivateNarrow);

export const isAllPrivateNarrow = (narrow: Narrow): boolean =>
Array.isArray(narrow) &&
narrow.length === 1 &&
narrow[0].operator === 'is' &&
narrow[0].operand === 'private';
Array.isArray(narrow)
&& narrow.length === 1
&& narrow[0].operator === 'is'
&& narrow[0].operand === 'private';

export const streamNarrow = (stream: string): Narrow => [
{
Expand Down Expand Up @@ -108,9 +108,9 @@ export const isMessageInNarrow = (message: Message, narrow: Narrow, ownEmail: st
}

if (
isTopicNarrow(narrow) &&
message.display_recipient === narrow[0].operand &&
message.subject === narrow[1].operand
isTopicNarrow(narrow)
&& message.display_recipient === narrow[0].operand
&& message.subject === narrow[1].operand
) {
return true;
}
Expand All @@ -130,10 +130,10 @@ export const isMessageInNarrow = (message: Message, narrow: Narrow, ownEmail: st
};

export const canSendToNarrow = (narrow: Narrow): boolean =>
isPrivateNarrow(narrow) ||
isGroupNarrow(narrow) ||
isStreamNarrow(narrow) ||
isTopicNarrow(narrow);
isPrivateNarrow(narrow)
|| isGroupNarrow(narrow)
|| isStreamNarrow(narrow)
|| isTopicNarrow(narrow);

export const getNarrowFromMessage = (message: Message, email: string) => {
if (Array.isArray(message.display_recipient)) {
Expand Down
Loading

0 comments on commit 13530c3

Please sign in to comment.