Skip to content

Commit

Permalink
[Fix] : Apply indentation when operator is used in front of the upper…
Browse files Browse the repository at this point in the history
… linetry 1
  • Loading branch information
Moong0122 committed Sep 28, 2020
1 parent 136dd2b commit 57bd86a
Show file tree
Hide file tree
Showing 2 changed files with 307 additions and 275 deletions.
42 changes: 18 additions & 24 deletions lib/rules/jsx-indent-props.js
Expand Up @@ -56,18 +56,17 @@ module.exports = {
},

create(context) {
debugger;
const MESSAGE = 'Expected indentation of {{needed}} {{type}} {{characters}} but found {{gotten}}.';

const extraColumnStart = 0;
let indentType = 'space';
/** @type {number|'first'} */
let indentSize = 4;
// beforeLine을 추가해줬다!
const beforeLine = {
isOperator : false,
indent : 0,
const line = {
isUsingOperator: false,
currentOperator: false
};

if (context.options.length) {
if (context.options[0] === 'first') {
indentSize = 'first';
Expand All @@ -88,15 +87,14 @@ module.exports = {
* @param {Number} gotten Indentation character count in the actual node/code
*/
function report(node, needed, gotten) {
debugger;
const msgContext = {
needed,
type: indentType,
characters: needed === 1 ? 'character' : 'characters',
gotten
};

context.report({ // 린트 에러를 호출하는 함수가 실행되지 않음
context.report({
node,
message: MESSAGE,
data: msgContext,
Expand All @@ -118,36 +116,35 @@ module.exports = {
src = lines[0];

let regExp;
let useOperator;
let operatorIndent;
if (indentType === 'space') {
regExp = /^[ ]+/;
} else {
regExp = /^[\t]+/;
}

const indent = regExp.exec(src);
useOperator = /^[:](?![:])/.test(src) || /^[?](?![?])/.test(src); // 연산자가 사용됐는지 확인해준다

if(useOperator) { // 만약 연산자가 사용됐다면 저장 해준다
beforeLine.isOperator = true;
beforeLine.indent = indent[0].length;
} else if(!useOperator && beforeLine.isOperator) { // 현재 줄에서는 연산자가 사용되지 않고, 이 전 줄에 연산자가 사용됐다면 인덴트를 추가로 해주자
beforeLine.isOperator = false;
operatorIndent = indentSize !== 'first' ? indentSize : 0;
const useOperator = /^([ ]|[\t])*[:]/.test(src) || /^([ ]|[\t])*[?]/.test(src);
line.currentOperator = false;
if (useOperator) {
line.isUsingOperator = true;
line.currentOperator = true;
}
debugger;
return indent ? indent[0].length + operatorIndent : 0;

return indent ? indent[0].length : 0;
}

/**
* Check indent for nodes list
* @param {ASTNode[]} nodes list of node objects
* @param {Number} indent needed indent
*/
function checkNodesIndent(nodes, indent) { // 여기가 요주의 함수이다 여기서 조건문으로 report로 넘어가는데 여
function checkNodesIndent(nodes, indent) {
nodes.forEach((node) => {
const nodeIndent = getNodeIndent(node);
debugger;
if (line.isUsingOperator && !line.currentOperator && indentSize !== 'first') {
indent += indentSize;
line.isUsingOperator = false;
}
if (
node.type !== 'ArrayExpression' && node.type !== 'ObjectExpression'
&& nodeIndent !== indent && astUtil.isNodeFirstInLine(context, node)
Expand All @@ -159,19 +156,16 @@ module.exports = {

return {
JSXOpeningElement(node) {
debugger;
if (!node.attributes.length) {
return;
}
let propIndent;
if (indentSize === 'first') {
const firstPropNode = node.attributes[0];
propIndent = firstPropNode.loc.start.column;
debugger;
} else {
const elementIndent = getNodeIndent(node);
propIndent = elementIndent + indentSize;
debugger;
}
checkNodesIndent(node.attributes, propIndent);
}
Expand Down

0 comments on commit 57bd86a

Please sign in to comment.