כלי סביבת עבודה

TODO בקוד

TODO הוא הבטחה שמישהו נתן לעצמו ואז איבד. הוא נכתב בדיוק במקום שבו הבעיה נמצאת, כלומר במקום שאיש אינו חוזר להביט בו, וכשהוא נעשה חשוב הכותב כבר עבר לצוות אחר. grep מוצא את כולם, ואלף שורות פלט של grep שקולות לכך שלא מצאת דבר.

לשונית TODO במזח המנתחים קוראת את כולם ואז עושה את מה ש־grep אינו יודע לעשות: מקבצת. פתחו את המזח משורת המצב או מלוח הפקודות (TODO בקוד) ועברו ללשונית השנייה.

שורת המצב סופרת את הסימונים לצד השגיאות והאזהרות של המנתחים; לחיצה על המונה הזה פותחת את הלשונית הזו.

לשונית TODO, מקובצת לפי אחראי

מה נחשב סימון

תגית, בתוך הערה, בקובץ ש־Git עוקב אחריו או היה עוקב אחריו:

כתוב נקרא בתור
// TODO: לשחרר את זה תגית TODO, בלי אחראי
//todo לשחרר את זה אותו דבר — הנקודתיים והרווח אינם חובה
# todo לשחרר את זה אותו דבר — לא האותיות הגדולות ולא השפה משנות
/* TODO(cgm): לשחרר את זה */ תגית TODO, אחראי cgm
-- TODO (CGM) לשחרר את זה אותו אחראי: cgm, (CGM) ו־[cgm] הם אדם אחד
<!-- TODO: @cgm לשחרר את זה --> שוב אותו דבר

התגיות הן TODO, FIXME, BUG, HACK, XXX, NOTE, OPTIMIZE, REVIEW, REFACTOR, DEPRECATED, QUESTION, IDEA, WIP ו־TEMP. לארבע הראשונות יש צבע, מפני ש«זה שבור» ו«זה רעיון שעלה לי» לא אמורים להיראות אותו הדבר ברשימה.

התגית חייבת לבוא אחרי פתיח של הערה — //, #, --, ;, %, /*, *, <!--, """. שום דבר אחר אינו נחשב: todo = [l for l in lines] הוא קוד, ולוח שרושם השמה למשתנה כחוב הוא לוח שלא סומכים עליו פעמיים. אותו כלל משאיר גם פונקציה בשם reviewNotes מחוץ לרשימה.

הקיבוץ הוא העיקר

ארבעה צירים, קליק אחד לכל אחד:

קיבוץ לפי עונה על
תגית איזה סוג חוב המאגר הזה נושא?
אחראי מה כל אחד השאיר אחריו — ומה יש בערימה ללא אחראי?
תיקייה איזו פינה של העץ מתרקבת?
קובץ הרשימה הרגילה, כשכבר ברור לאן אתם הולכים.

ללא אחראי היא קבוצה אמיתית ולא שארית: סימונים שאיש לא חתם עליהם הם הסימונים שאיש לעולם אינו מרים, ולראות אותם ספורים — זו כל הנקודה.

תגיות הסינון שלמעלה מסננות את הרשימה; כך גם לחיצה על תג האחראי בשורה, וכך גם תיבת החיפוש, שמתאימה לטקסט, לקובץ, לתגית ולאחראי. רק שהשתנו מצמצם לקבצים שערכתם ועדיין לא ביצעתם להם commit — הבדיקה האחרונה לפני push, כש־// FIXME שהשארתם לפני שעה עומד להפוך לקבוע.

לחיצה על שורה פותחת את הקובץ באותה שורה.

מה הוא לא עושה

  • הוא קורא, לעולם לא כותב. אין «סמן כבוצע»: הדרך לסגור TODO היא למחוק את השורה ולבצע לכך commit. לרשימה ש־Gitcito שומר עבורכם ראו משימות, וזה דבר אחר לגמרי: הערות פרטיות שחיות באפליקציה, לא בקוד.
  • קבצים מוסתרים מדולגים, יחד עם node_modules, ולא משנה מה כתוב בתגיות שבתוכם. קבצים לא מנוטרים דווקא נכללים: סימון שנכתב לפני חמש דקות הוא זה שהכי כדאי לראות.
  • הוא אינו מבחין בין הערה למחרוזת. שורה const banner = "// TODO" היא סימון מבחינת הסריקה. אין לו מנתח תחביר לארבעים שפות והוא אינו מתיימר להחזיק אחד.
  • הסריקה היא תצלום רגע. אם תערכו קובץ, הלוח ישמור על המספרים שהיו לו עד לסריקה הבאה; כפתור הרענון הוא כל הסיפור.
  • הוא נעצר ב־5,000 סימונים. למאגר שמעבר לזה יש בעיית חוב ששום לוח לא יפתור.

היכן הוא רץ

git grep אחד על עץ העבודה, ולכן הוא לוקח אלפיות שנייה במקום שבו לשונית בעיות לוקחת שניות: שום דבר אינו מהודר, שום שרשרת כלים אינה מעורבת, והחיפוש מדלג על קבצים בינאריים ועל נתיבים מוסתרים משום ש־Git כבר יודע אילו הם.

שיפור התרגום הזה ב־GitHub