Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.js 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // @ts-nocheck
  2. 'use strict';
  3. const ruleMessages = require('../../utils/ruleMessages');
  4. const selectorListCommaWhitespaceChecker = require('../selectorListCommaWhitespaceChecker');
  5. const validateOptions = require('../../utils/validateOptions');
  6. const whitespaceChecker = require('../../utils/whitespaceChecker');
  7. const ruleName = 'selector-list-comma-newline-before';
  8. const messages = ruleMessages(ruleName, {
  9. expectedBefore: () => 'Expected newline before ","',
  10. expectedBeforeMultiLine: () => 'Expected newline before "," in a multi-line list',
  11. rejectedBeforeMultiLine: () => 'Unexpected whitespace before "," in a multi-line list',
  12. });
  13. function rule(expectation, options, context) {
  14. const checker = whitespaceChecker('newline', expectation, messages);
  15. return (root, result) => {
  16. const validOptions = validateOptions(result, ruleName, {
  17. actual: expectation,
  18. possible: ['always', 'always-multi-line', 'never-multi-line'],
  19. });
  20. if (!validOptions) {
  21. return;
  22. }
  23. let fixData;
  24. selectorListCommaWhitespaceChecker({
  25. root,
  26. result,
  27. locationChecker: checker.beforeAllowingIndentation,
  28. checkedRuleName: ruleName,
  29. fix: context.fix
  30. ? (ruleNode, index) => {
  31. fixData = fixData || new Map();
  32. const commaIndices = fixData.get(ruleNode) || [];
  33. commaIndices.push(index);
  34. fixData.set(ruleNode, commaIndices);
  35. return true;
  36. }
  37. : null,
  38. });
  39. if (fixData) {
  40. fixData.forEach((commaIndices, ruleNode) => {
  41. let selector = ruleNode.raws.selector ? ruleNode.raws.selector.raw : ruleNode.selector;
  42. commaIndices
  43. .sort((a, b) => b - a)
  44. .forEach((index) => {
  45. let beforeSelector = selector.slice(0, index);
  46. const afterSelector = selector.slice(index);
  47. if (expectation.startsWith('always')) {
  48. const spaceIndex = beforeSelector.search(/\s+$/);
  49. if (spaceIndex >= 0) {
  50. beforeSelector =
  51. beforeSelector.slice(0, spaceIndex) +
  52. context.newline +
  53. beforeSelector.slice(spaceIndex);
  54. } else {
  55. beforeSelector += context.newline;
  56. }
  57. } else if (expectation === 'never-multi-line') {
  58. beforeSelector = beforeSelector.replace(/\s*$/, '');
  59. }
  60. selector = beforeSelector + afterSelector;
  61. });
  62. if (ruleNode.raws.selector) {
  63. ruleNode.raws.selector.raw = selector;
  64. } else {
  65. ruleNode.selector = selector;
  66. }
  67. });
  68. }
  69. };
  70. }
  71. rule.ruleName = ruleName;
  72. rule.messages = messages;
  73. module.exports = rule;