Skip to content

Prettier #2

@tfrijsewijk

Description

@tfrijsewijk

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 ✅

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions