-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Voorwoord
Beste DSO-er,
In het kader van uniformiteit, onderhoudbaarheid, efficientie, en schaalbaarheid wil ik kijken of de diverse applicaties wat dichter bij elkaar kunnen komen.
Ondanks de (soms grote) verschillen is er ook overlap. Denk aan code opmaak, linting, TypeScript configuratie en browserslist. Elk team denkt na over de configuratie van deze tooling, maar we leren niet van elkaar. De kennis en beslissingen blijven binnen het team.
De voordelen zijn legio:
- Uniforme schrijfwijze
- Centraal updaten en toepassen van regels bij nieuwe inzichten of tool updates.
- Kennisdeling
Met een uniforme codebase is de drempel voor developers om bij elkaar mee te kijken/helpen lager. De developer hoeft immers niet meer bekend te raken met de lokaal geldende configuratie.
In dit issue trap ik af met het centraliseren van de Prettier configuratie. Hoewel wellicht triviaal, is dit een kleine en compacte tool waarmee we dit proces kunnen doorlopen voordat we aan de grotere tooling zoals ESLint of TypeScript configuraties beginnen.
Voor dit om te slagen is het belangrijk dat we dit met z'n allen dragen. Het is niet de bedoeling dat we deze configuraties als "basis configuratie" gebruiken om lokaal verder te configureren. Smaak en kraak wordt binnen de context van de centrale configuraties betwist en besproken. Deze uitgangspositie geldt niet voor situaties waarin externe factoren de overhand hebben.
Groet,
Thomas
Inleiding
Ik heb de prettier settings van alle DSO frontend applicaties geinventariseerd. Deze input heb ik naast elkaar gelegd en een gemiddelde configuratie van gemaakt.
Inventarisatie
export default {
// toolkit
endOfLine: "crlf",
printWidth: 120,
// stelselcatalogus
printWidth: 120,
singleQuote: true,
// viewer
arrowParens: 'avoid',
bracketSameLine: true,
endOfLine: 'auto',
printWidth: 120,
singleQuote: true,
trailingComma: 'es5',
// werkzaamheden
bracketSameLine: true, // was jsxBracketSameLine, but that is deprecated and superseded with bracketSameLine
printWidth: 120,
singleQuote: true,
// rtr frontend
singleQuote: true,
printWidth: 120,
trailingComma: "none",
arrowParens: "avoid",
// team alpha
arrowParens: "avoid", // graag geen parenthesis voor enkele argumenten
bracketSameLine: false,
printWidth: 120,
singleQuote: true,
trailingComma: 'none' //altijd een comma toevoegen vinden we niet netjes. GIT diff als argument vinden we niet sterk genoeg.
};IHR heeft een voorkeur doorgegeven. De PR02 en PR12 applicaties hebben geen Prettier.
Gelijkwaardige configuraties
In dit overzicht zijn de applicatie configuraties aangevuld met de missende configuraties van andere applicaties met de default Prettier settings.
Hiermee zijn de configuraties gelijkwaardig aan elkaar en kunnen we een gemiddelde configuratie bepalen.
export default {
// toolkit
endOfLine: "crlf",
printWidth: 120,
arrowParens: "always",
bracketSameLine: false,
singleQuote: false,
trailingComma: "all",
// stelselcatalogus
printWidth: 120,
singleQuote: true,
arrowParens: "always",
bracketSameLine: false,
endOfLine: "lf",
trailingComma: "all",
// viewer
arrowParens: 'avoid',
bracketSameLine: true,
endOfLine: 'auto',
printWidth: 120,
singleQuote: true,
trailingComma: 'es5',
// werkzaamheden
bracketSameLine: true,
printWidth: 120,
singleQuote: true,
arrowParens: "always",
endOfLine: "lf",
trailingComma: "all",
// rtr frontend
singleQuote: true,
printWidth: 120,
trailingComma: "none",
arrowParens: "avoid",
endOfLine: "lf",
bracketSameLine: false,
// team alpha
arrowParens: "avoid",
bracketSameLine: false,
printWidth: 120,
singleQuote: true,
trailingComma: 'none',
endOfLine: "lf",
};Gemiddelde configuratie
Onderstaand is een gemiddelde configuratie volgens meeste stemmen gelden. De configuratie arrowParens is gelijk (3 om 3).
Om het verschil te maken heb ik de default setting van Prettier meegenomen.
export default {
arrowParens: "always", // 3x "always", 3x "avoid". (default: "always"),
bracketSameLine: false, // 4x false, 2x true. (default: false),
endOfLine: 'lf', // 4x "lf", 1x "crlf", 1x "auto". (default: "lf")
printWidth: 120, // 6x 120, heeft iedereen. (default: 80)
singleQuote: true, // 5x "true", 1x "false". (default: false),
trailingComma: "all" // 3x "all", 2x "none", 1x "es5". (default: "all"),
};Gemiddelde configuratie zonder Prettier defaults
export default {
printWidth: 120,
singleQuote: true
}Impact per applicatie
In onderstaand overzicht staat IHR niet genoemd omdat er geen configuratie actief is.
Toolkit
De toolkit krijgt andere line endings (van "crlf" naar "lf") en gaat van double quotes naar single quotes.
export default {
printWidth: 120, // ✅
endOfLine: 'lf', // ⬅️ crlf
singleQuote: false, // ⬅️ true
};Stelselcatalogus
Geen impact ✅
export default {
printWidth: 120, // ✅
singleQuote: true, // ✅
}Viewer
De viewer krijgt altijd parentheses (haakjes) bij arrow functions, ook als er maar één parameter (zonder type) is. Daarnaast word bij de opening HTML tag de closing angle bracket op een eigen regel gezet als de HTML attributen op een eigen regel staan.
Verder wordt er altijd een trailingComma geplaatst, en niet meer op alleen ES5 compatible plekken. Gezien de browsersupport is dat geen probleem.
En de line endings gaan van "auto" naar "lf".
export default {
printWidth: 120, // ✅
singleQuote: true, // ✅
arrowParens: 'always', // ⬅️ 'avoid'
bracketSameLine: false, // ⬅️ true
endOfLine: 'lf', // ⬅️ 'auto'
trailingComma: 'all', // ⬅️ 'es5'
};Werkzaamheden
Bij de werkzaamheden applicatie wordt bij de opening HTML tag de closing angle bracket op een eigen regel gezet als de HTML attributen op een eigen regel staan.
export default {
printWidth: 120, // ✅
singleQuote: true, // ✅
bracketSameLine: false, // ⬅️ true
};RTR frontend
De RTR frontend gaat overal trailing comma's krijgen en de arrow functions krijgen altijd haakjes, ook als er maar één parameter is.
export default {
singleQuote: true, // ✅
printWidth: 120, // ✅
trailingComma: 'all', // ⬅️ 'none'
arrowParens: 'always', // ⬅️ 'avoid'
};Participerende teams
- IHR ✅
- PR02 ❌
- PR12 ❌
- PR13 ✅
- Stelselcatalogus ✅
- Toolkit ✅
- Viewer ✅