มีวิธีเรียกสิ่งที่ต้องการclang-format --style=Webkit
สำหรับโฟลเดอร์โครงการ cpp ทั้งหมดแทนที่จะเรียกใช้แยกกันสำหรับแต่ละไฟล์หรือไม่?
ฉันกำลังใช้clang-format.py
และvim
ทำสิ่งนี้ แต่ฉันคิดว่ามีวิธีการใช้ครั้งเดียว
มีวิธีเรียกสิ่งที่ต้องการclang-format --style=Webkit
สำหรับโฟลเดอร์โครงการ cpp ทั้งหมดแทนที่จะเรียกใช้แยกกันสำหรับแต่ละไฟล์หรือไม่?
ฉันกำลังใช้clang-format.py
และvim
ทำสิ่งนี้ แต่ฉันคิดว่ามีวิธีการใช้ครั้งเดียว
คำตอบ:
สิ่งที่เกี่ยวกับ:
clang-format -i -style=WebKit *.cpp *.h
ในโฟลเดอร์โครงการ อ็อพชัน -i ทำให้มันถูกแทนที่ (โดยค่าเริ่มต้นเอาต์พุตที่จัดรูปแบบจะถูกเขียนลงใน stdout)
**
โครงสร้าง
clang-tidy
อะไร?
*.cpp
เพื่อสร้างรายการไฟล์ควรใช้งานได้ clang-tidy
คำสั่งช่วยให้ผ่านหลายไฟล์ `USAGE: clang-tidy [options] <source0> [... <sourceN>]` ในทางปฏิบัติอาจไม่ใช่วิธีที่ดีที่สุด Clang-tidy ทำการวิเคราะห์ที่ลึกกว่ามากดังนั้นจึงต้องใช้แฟล็กคอมไพเลอร์สำหรับแต่ละไฟล์เป็นต้นเมื่อฉันใช้ clang-tidy ฉันมักจะมี "ฐานข้อมูลการคอมไพล์" ซึ่งเป็นไฟล์ JSON ที่มีคำสั่งสำหรับแต่ละไฟล์และสคริปต์บางตัว มากกว่านั้น เมื่อสองสามปีก่อนอาจจะมีวิธีที่ดีกว่านี้ก็ได้
น่าเสียดายที่ไม่มีวิธีใช้รูปแบบเสียงดังซ้ำ *.cpp
จะจับคู่เฉพาะไฟล์ในไดเร็กทอรีปัจจุบันไม่ใช่ไดเร็กทอรีย่อย แม้**/*
จะไม่ทำงาน
โชคดีที่มีวิธีแก้ปัญหาคือคว้าชื่อไฟล์ทั้งหมดด้วยfind
คำสั่งและไพพ์เข้ามาตัวอย่างเช่นหากคุณต้องการจัดรูปแบบทั้งหมด.h
และ.cpp
ไฟล์ในไดเร็กทอรีfoo/bar/
แบบวนซ้ำคุณสามารถทำได้
find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i
ดูที่นี่สำหรับการสนทนาเพิ่มเติม
**/*.cpp
ดูเหมือนว่าจะทำงานใน (ปัจจุบันพอสมควร) ทุบตี คุณอาจต้องทำshopt -s globstar
ก่อน
GLOB_RECURSE
เพื่อค้นหาทุกไฟล์และผ่านไปยัง.cpp
clang-format
find
และxargs
ควรใช้find ... -print0
และxargs -0 ...
เพื่อให้แน่ใจว่าชื่อไฟล์ทุกประเภทได้รับการจัดการอย่างถูกต้อง
find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
จะแก้ไขปัญหา
ขั้นแรกให้สร้าง.clang-format
ไฟล์หากไม่มี:
clang-format -style=WebKit -dump-config > .clang-format
เลือกสไตล์ที่กำหนดไว้ล่วงหน้าตามที่คุณต้องการหรือแก้ไข.clang-format
ไฟล์ที่ได้
ตัวกำหนดค่ารูปแบบเสียงดังมีประโยชน์
จากนั้นเรียกใช้:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
นามสกุลไฟล์อื่น ๆ กว่าcpp
, hpp
, cc
และสามารถนำมาใช้ในการแสดงออกปกติเพียงให้แน่ใจว่าจะแยกพวกเขาด้วยcxx
\|
-style=file
จะมีวิธีการระบุเส้นทางของไฟล์กำหนดเองได้อย่างไร ฉันลอง-style=~/.clang-format
แล้วมันไม่ได้ผล
cp ~/.clang-format .
จากนั้นคำสั่ง find ในคำตอบของคุณ
ฉันเพิ่งพบ bash-script ซึ่งทำสิ่งที่คุณต้องการ:
https://github.com/eklitzke/clang-format-all
นี่คือสคริปต์ทุบตีที่จะทำงาน
clang-format -i
กับโค้ดของคุณคุณสมบัติ:
- ค้นหาเส้นทางที่ถูกต้อง
clang-format
บน Ubuntu / Debian ซึ่งเข้ารหัสเวอร์ชัน LLVM ในclang-format
ชื่อไฟล์- แก้ไขไฟล์แบบวนซ้ำ
- ตรวจพบนามสกุลไฟล์ทั่วไปที่ใช้โดยโปรเจ็กต์ C / C ++
ใน Windows ฉันใช้มันสำเร็จแล้วใน Git Bash และ WSL
สำหรับผู้ใช้ Windows: หากคุณรองรับ Powershell 3.0 คุณสามารถทำได้:
Get-ChildItem -Path . -Directory -Recurse |
foreach {
cd $_.FullName
&clang-format -i -style=WebKit *.cpp
}
หมายเหตุ 1: ใช้pushd .
และpopd
ถ้าคุณต้องการมีไดเร็กทอรีปัจจุบันเดียวกันก่อนและหลังสคริปต์
หมายเหตุ 2: สคริปต์ทำงานในไดเร็กทอรีการทำงานปัจจุบัน
Note3: สิ่งนี้อาจเขียนเป็นบรรทัดเดียวได้หากสิ่งนั้นสำคัญสำหรับคุณจริงๆ
ฉันใช้คำสั่งต่อไปนี้เพื่อจัดรูปแบบไฟล์วัตถุประสงค์ -C ทั้งหมดภายใต้โฟลเดอร์ปัจจุบันแบบวนซ้ำ :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
ฉันได้กำหนดนามแฝงต่อไปนี้ในของฉัน.bash_profile
เพื่อให้ง่ายขึ้น:
# Format objC files (*.h and *.m) under the current folder, recursively
alias clang-format-all="find . -name \"*.m\" -o -name \"*.h\" | sed 's| |\\ |g' | xargs clang-format -i"
นี่คือโซลูชันที่ค้นหาแบบวนซ้ำและไพพ์ไฟล์ทั้งหมดไปยังรูปแบบเสียงดังเป็นรายการไฟล์ในคำสั่งเดียว นอกจากนี้ยังไม่รวมไดเร็กทอรี "build" (ฉันใช้ CMake) แต่คุณสามารถข้ามขั้นตอน "grep" เพื่อลบออกได้
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
ในการทุบตีสมัยใหม่คุณสามารถรวบรวมข้อมูลแผนผังไฟล์ซ้ำได้
for file_name in ./src/**/*.{cpp,h,hpp}; do
if [ -f "$file_name" ]; then
printf '%s\n' "$file_name"
clang-format -i $file_name
fi
done
ที่นี่จะถือว่าแหล่งที่มาอยู่ใน./src
และ.clang-format
มีข้อมูลการจัดรูปแบบ
clang-format-3.6 -i -style=file *.cpp *.h *.hpp