Skip to content

Commit 76e8231

Browse files
Williamhuv1k
authored andcommitted
Additional Prettier Options (#933)
* Allow more prettier options * update codemirror with settings * remove yarn commands in build script
1 parent c65900c commit 76e8231

File tree

8 files changed

+83
-25
lines changed

8 files changed

+83
-25
lines changed

README.md

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,17 @@ These are the settings currently available:
6060

6161
```js
6262
{
63-
'general.betaUpdates': false,
6463
'editor.cursorShape': 'line', // possible values: 'line', 'block', 'underline'
65-
'editor.fontSize': 14,
6664
'editor.fontFamily': `'Source Code Pro', 'Consolas', 'Inconsolata', 'Droid Sans Mono', 'Monaco', monospace`,
67-
'editor.theme': 'dark', // possible values: 'dark', 'light'
65+
'editor.fontSize': 14,
6866
'editor.reuseHeaders': true, // new tab reuses headers from last tab
67+
'editor.theme': 'dark', // possible values: 'dark', 'light'
68+
'general.betaUpdates': false,
69+
'prettier.printWidth': 80,
70+
'prettier.tabWidth': 2,
71+
'prettier.useTabs': false,
6972
'request.credentials': 'omit', // possible values: 'omit', 'include', 'same-origin'
73+
'schema.disableComments': boolean,
7074
'tracing.hideTracingResponse': true,
7175
}
7276
```
@@ -86,14 +90,18 @@ The React component `<Playground />` and all middlewares expose the following op
8690

8791
```ts
8892
interface ISettings {
89-
'general.betaUpdates': boolean
90-
'editor.theme': Theme
91-
'editor.reuseHeaders': boolean
92-
'tracing.hideTracingResponse': boolean
93-
'editor.fontSize': number
94-
'editor.fontFamily': string
95-
'request.credentials': string
96-
'schema.disableComments': boolean
93+
'editor.cursorShape': 'line' | 'block' | 'underline'
94+
'editor.fontFamily': string
95+
'editor.fontSize': number
96+
'editor.reuseHeaders': boolean
97+
'editor.theme': 'dark' | 'light'
98+
'general.betaUpdates': boolean
99+
'prettier.printWidth': number
100+
'prettier.tabWidth': number
101+
'prettier.useTabs': boolean
102+
'request.credentials': 'omit' | 'include' | 'same-origin'
103+
'schema.disableComments': boolean
104+
'tracing.hideTracingResponse': boolean
97105
}
98106
```
99107

packages/graphql-playground-react/src/components/Playground/QueryEditor.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
getQuery,
1818
getSelectedSessionIdFromRoot,
1919
getScrollTop,
20+
getTabWidth,
21+
getUseTabs,
2022
} from '../../state/sessions/selectors'
2123
import EditorWrapper from './EditorWrapper'
2224
import { styled } from '../../styled'
@@ -48,6 +50,8 @@ export interface ReduxProps {
4850
value: string
4951
sessionId?: string
5052
scrollTop?: number
53+
tabWidth?: number
54+
useTabs?: boolean
5155
}
5256

5357
const md = new MD()
@@ -102,7 +106,8 @@ export class QueryEditor extends React.PureComponent<Props & ReduxProps, {}> {
102106
autofocus: !isIframe() ? true : false,
103107
value: this.props.value || '',
104108
lineNumbers: true,
105-
tabSize: 2,
109+
tabSize: this.props.tabWidth || 2,
110+
indentWithTabs: this.props.useTabs || false,
106111
mode: 'graphql',
107112
theme: 'graphiql',
108113
keyMap: 'sublime',
@@ -305,6 +310,8 @@ const mapStateToProps = createStructuredSelector({
305310
value: getQuery,
306311
sessionId: getSelectedSessionIdFromRoot,
307312
scrollTop: getScrollTop,
313+
tabWidth: getTabWidth,
314+
useTabs: getUseTabs,
308315
})
309316

310317
export default connect(

packages/graphql-playground-react/src/components/Playground/util/createSDL.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,18 @@ export function getSDL(
9191
// Removes Comments but still has new lines
9292
const sdlWithNewLines = rawSdl.replace(/(\#[\w\'\s\r\n\*](.*)$)/gm, '')
9393
// Removes newlines left behind by Comments
94-
const sdlWithoutComments = prettify(sdlWithNewLines, 80)
94+
const sdlWithoutComments = prettify(sdlWithNewLines, {
95+
printWidth: 80,
96+
tabWidth: 2,
97+
useTabs: false,
98+
})
9599
return addLineBreaks(sdlWithoutComments, commentsDisabled)
96100
}
97-
const sdl = prettify(rawSdl, 80)
101+
const sdl = prettify(rawSdl, {
102+
printWidth: 80,
103+
tabWidth: 2,
104+
useTabs: false,
105+
})
98106
return addLineBreaks(sdl)
99107
}
100108
return ''

packages/graphql-playground-react/src/state/sessions/sagas.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,11 @@ function* prettifyQuery() {
192192
const { query } = yield select(getSelectedSession)
193193
const settings = yield select(getSettings)
194194
try {
195-
const prettyQuery = prettify(query, settings['prettier.printWidth'])
195+
const prettyQuery = prettify(query, {
196+
printWidth: settings['prettier.printWidth'],
197+
tabWidth: settings['prettier.tabWidth'],
198+
useTabs: settings['prettier.useTabs'],
199+
})
196200
yield put(editQuery(prettyQuery))
197201
} catch (e) {
198202
// TODO show erros somewhere

packages/graphql-playground-react/src/state/sessions/selectors.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createSelector } from 'reselect'
2-
import { makeWorkspace } from '../workspace/reducers'
2+
import { makeWorkspace, getSettingsString } from '../workspace/reducers'
33

44
function getSelectedWorkspaceId(state) {
55
return state.get('selectedWorkspace')
@@ -86,6 +86,27 @@ export const getDocExplorerWidth = makeSessionSelector('docExplorerWidth')
8686
export const getNextQueryStartTime = makeSessionSelector('nextQueryStartTime')
8787
export const getTracingSupported = makeSessionSelector('tracingSupported')
8888

89+
export const getTabWidth = createSelector([getSettingsString], settings => {
90+
try {
91+
const json = JSON.parse(settings)
92+
return json['prettier.tabWidth'] || 2
93+
} catch (e) {
94+
//
95+
}
96+
97+
return 2
98+
})
99+
export const getUseTabs = createSelector([getSettingsString], settings => {
100+
try {
101+
const json = JSON.parse(settings)
102+
return json['prettier.useTabs'] || false
103+
} catch (e) {
104+
//
105+
}
106+
107+
return false
108+
})
109+
89110
export const getHeadersCount = createSelector([getHeaders], headers => {
90111
try {
91112
const json = JSON.parse(headers)

packages/graphql-playground-react/src/state/workspace/reducers.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,19 @@ export class Workspace extends Record({
4141
}
4242

4343
export const defaultSettings: ISettings = {
44-
'general.betaUpdates': false,
4544
'editor.cursorShape': 'line',
46-
'editor.fontSize': 14,
4745
'editor.fontFamily': `'Source Code Pro', 'Consolas', 'Inconsolata', 'Droid Sans Mono', 'Monaco', monospace`,
48-
'editor.theme': 'dark',
46+
'editor.fontSize': 14,
4947
'editor.reuseHeaders': true,
48+
'editor.theme': 'dark',
49+
'general.betaUpdates': false,
5050
'prettier.printWidth': 80,
51+
'prettier.tabWidth': 2,
52+
'prettier.useTabs': false,
5153
'request.credentials': 'omit',
52-
'tracing.hideTracingResponse': true,
5354
'schema.disableComments': true,
5455
'schema.enablePolling': true,
56+
'tracing.hideTracingResponse': true,
5557
}
5658

5759
// tslint:disable-next-line:max-classes-per-file

packages/graphql-playground-react/src/types.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ export type Theme = 'dark' | 'light'
1717
export type CursorShape = 'line' | 'block' | 'underline'
1818

1919
export interface ISettings {
20-
['general.betaUpdates']: boolean
2120
['editor.cursorShape']: CursorShape
2221
['editor.fontFamily']: string
2322
['editor.fontSize']: number
24-
['editor.theme']: Theme
2523
['editor.reuseHeaders']: boolean
24+
['editor.theme']: Theme
25+
['general.betaUpdates']: boolean
2626
['prettier.printWidth']: number
27-
['tracing.hideTracingResponse']: boolean
27+
['prettier.tabWidth']: number
28+
['prettier.useTabs']: boolean
2829
['request.credentials']: 'omit' | 'include' | 'same-origin'
2930
['schema.disableComments']: boolean
3031
['schema.enablePolling']: boolean
32+
['tracing.hideTracingResponse']: boolean
3133
}

packages/graphql-playground-react/src/utils.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,16 @@ export function safely(cb: any) {
1212
}
1313
}
1414

15-
export function prettify(query: string, printWidth: number) {
15+
interface PrettierOptions {
16+
printWidth: number
17+
tabWidth: number
18+
useTabs: boolean
19+
}
20+
21+
export function prettify(query: string, options: PrettierOptions) {
1622
return prettier.format(query, {
23+
...options,
1724
parser: 'graphql',
18-
printWidth,
1925
plugins: [graphql],
2026
})
2127
}

0 commit comments

Comments
 (0)