Skip to content

Commit

Permalink
try 1
Browse files Browse the repository at this point in the history
  • Loading branch information
Moong0122 committed Sep 27, 2020
1 parent 5a00096 commit 136dd2b
Show file tree
Hide file tree
Showing 2 changed files with 277 additions and 229 deletions.
31 changes: 26 additions & 5 deletions lib/rules/jsx-indent-props.js
Expand Up @@ -56,13 +56,18 @@ 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,
};
if (context.options.length) {
if (context.options[0] === 'first') {
indentSize = 'first';
Expand All @@ -83,14 +88,15 @@ 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 @@ -112,24 +118,36 @@ module.exports = {
src = lines[0];

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

const indent = regExp.exec(src);
return indent ? indent[0].length : 0;
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;
}
debugger;
return indent ? indent[0].length + operatorIndent : 0;
}

/**
* Check indent for nodes list
* @param {ASTNode[]} nodes list of node objects
* @param {Number} indent needed indent
*/
function checkNodesIndent(nodes, indent) {
function checkNodesIndent(nodes, indent) { // 여기가 요주의 함수이다 여기서 조건문으로 report로 넘어가는데 여
nodes.forEach((node) => {
const nodeIndent = getNodeIndent(node);
debugger;
if (
node.type !== 'ArrayExpression' && node.type !== 'ObjectExpression'
&& nodeIndent !== indent && astUtil.isNodeFirstInLine(context, node)
Expand All @@ -141,16 +159,19 @@ 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 136dd2b

Please sign in to comment.