몇 가지 간단한 규칙에 따라 소스 코드를 들여쓰기하는 방법은 무엇입니까?
예를 들어, 저는 sed를 사용하고 있으며 셀레늄 HTML 소스 테이블을 다음 rspec과 유사한 코드로 변환하도록 요청했습니다. describe
와 사이의 줄을 일관되게 들여쓰려면 어떻게 해야 합니까 end
? 이상적으로는 들여쓰기를 추가하고 싶습니다.
describe "Landing" do
visit("http://some_url/url_reset")
visit("http://some_url/url_3_step_minimal_foundation")
# comments
expect(css_vehicle1_auto_year) to be_visible
end
describe "Stage1" do
wait_for_element_present(css_vehicle1_auto_year option_auto_year)
select(auto_year, from: css_vehicle1_auto_year)
...
end
describe "Stage2" do
fill_in(css_driver1_first_name, with: driver1_first_name)
fill_in(css_driver1_last_name, with: driver1_last_name)
...
submit(css_policy_form)
expect(css_vehicle1_coverage_type) to be_visible
end
describe "Stage3" do
wait_for_element_present(css_vehicle1_coverage_type)
select(coverage_type, from: css_vehicle1_coverage_type)
find(css_has_auto_insurance).click
...
submit(css_policy_form)
expect(css_quotes) to be_visible
end
그래서 나는 가지고있다
describe "Landing" do
visit("http://some_url/url_reset")
visit("http://some_url/url_3_step_minimal_foundation")
# comments
expect(css_vehicle1_auto_year) to be_visible
end
describe "Stage1" do
wait_for_element_present(css_vehicle1_auto_year option_auto_year)
select(auto_year, from: css_vehicle1_auto_year)
...
end
describe "Stage2" do
fill_in(css_driver1_first_name, with: driver1_first_name)
fill_in(css_driver1_last_name, with: driver1_last_name)
...
submit(css_policy_form)
expect(css_vehicle1_coverage_type) to be_visible
end
describe "Stage3" do
wait_for_element_present(css_vehicle1_coverage_type)
select(coverage_type, from: css_vehicle1_coverage_type)
find(css_has_auto_insurance).click
...
submit(css_policy_form)
expect(css_quotes) to be_visible
end
기존 sed 및 awk의 소스 코드는 다음 위치에 있습니다.https://jsfiddle.net/4gbj5mh4/하지만 정말 혼란스럽고 내가 묻는 것이 아닙니다. 나는 간단한 sed와 awk에 익숙해졌지만 어디서부터 시작해야 할지 모르겠습니다.
재귀도 처리할 수 있다면 좋을 것 같습니다. 나에게는 중요하지 않지만 일반화는 이 질문을 사용하는 다른 사람들에게 유용할 수 있습니다.
describe "a" do
describe "b" do
stuff
more stuff
end
end
도착하다
describe "a" do
describe "b" do
stuff
more stuff
end
end
그런데, 나는 또한 이 사용자 정의 변환을 수행하고 있습니다. 부분적으로는 변수를 셀레늄의 페이지 개체로 사용하고 있고 rspec으로의 기본 제공 내보내기를 차단하고 있기 때문입니다.
답변1
그리고 awk
:
awk '
/^end/ { sub(" ", "", indent) } # Or { indent = substr(indent, 3) }
{ print indent $0 }
/^describe/ { indent = indent" " }
' <file