มี yasnippet ผลิตความคิดเห็น doxygen prepopulated?


10

สำหรับฟังก์ชัน C ++ ต่อไปนี้:

bool importantStuff(double a, double b);

มันควรจะส่งออกตัวอย่างต่อไปนี้อาจไม่มีแท็ก:

/**
 * <Insert description of importantStuff>
 *
 * @param a <Insert description of a>
 * @param b <Insert description of b>
 * @return <Insert description of the return value>
 */

ฉันมองไปรอบสุทธิ แต่ที่ใกล้เคียงที่สุดผมเคยไปที่คำตอบคือนี้คำถาม SO เก่าที่ตอบขึ้นอยู่กับโหมด doxymacs ไม่มีการบำรุงรักษา


ฉันคิดว่าc-sharp-modeมีบางอย่างที่ทำสิ่งนี้
erikstokes

คุณต้องการทำสิ่งนี้สำหรับฟังก์ชั่นใหม่หรือฟังก์ชั่นที่มีอยู่หรือไม่?
itsjeyd

เมื่อถามคำถามฉันคิดเกี่ยวกับความคิดเห็นของออกซิเจนที่ถูกสร้างขึ้นจากลายเซ็นของฟังก์ชัน
Rovanion

คำตอบ:


4

ฉันใช้ต่อไปนี้ซึ่งเป็นการตอบโต้กับผู้ใช้ได้ของมาตรฐาน doxymacs ที่ใช้หนึ่งและ abo-abo ของความหมายตามที่กล่าวถึงเป็นคำตอบแล้ว - นี้ต้องใช้ความหมายและ yasnippet เท่านั้น สิ่งนี้จะเติมข้อมูลล่วงหน้าของตัวยึดตำแหน่ง yasnippet บางส่วนพร้อมข้อมูลที่เกี่ยวข้องและเปรียบเทียบกับเวอร์ชันของ abo-abo ด้วย


# -*- mode: snippet -*-
# name: dox
# key: dox
# type: command
# --
(unless (and (fboundp 'semantic-current-tag)
             semantic-mode)
  (error "Semantic required to use dox snippet"))
(let ((tag (senator-next-tag)))
  (while (or (null tag)
             (not (semantic-tag-of-class-p tag 'function)))
    (setq tag (senator-next-tag)))
  (let* ((name (semantic-tag-name tag))
         (attrs (semantic-tag-attributes tag))
         (args (plist-get attrs :arguments))
         (return-name (plist-get attrs :type))
         (idx 1))
    (if (listp return-name)
      (setq return-name (car return-name)))
    (yas/expand-snippet
     (format
      "/**
* @brief ${1:%s}
*
%s
%s*/
"
      name
      (mapconcat
       (lambda (x)
         (format "* @param %s ${%d:Description of %s}"
                 (car x) (incf idx) (car x)))
       args
       "\n")
      (if (and return-name (not (string-equal "void" return-name)))
          (format " * @return ${%d:%s}\n" (incf idx) return-name)
        "")))))


วิธีการแก้ปัญหานี้ใช้งานได้ดี แต่ต้องรอโหมด semantic เพื่อตัดรหัสที่จำเป็นทั้งหมดยุ่งยากเล็กน้อย ฉันยังมี emacs ติดอยู่ในลูปที่ไม่มีที่สิ้นสุดถ้าฉันเขียน dox <tab> หน้าตัวแปรแทน แต่ไม่มีใครในโลกนี้เลย: D
Rovanion

สิ่งนี้ควรได้รับการโหวตให้สูงกว่าที่กล่าวไว้ข้างต้นเนื่องจากมีความสมบูรณ์มากกว่า moo-doxygen
Alejandro Erickson

3

เพียงแค่เพิ่มคุณลักษณะนี้เพื่อฟังก์ชั่น args

นี่คือรหัสถ้าคุณสนใจ ใช้ CEDET:

(defun moo-doxygen ()
  "Generate a doxygen yasnippet and expand it with `aya-expand'.
The point should be on the top-level function name."
  (interactive)
  (move-beginning-of-line nil)
  (let ((tag (semantic-current-tag)))
    (unless (semantic-tag-of-class-p tag 'function)
      (error "Expected function, got %S" tag))
    (let* ((name (semantic-tag-name tag))
           (attrs (semantic-tag-attributes tag))
           (args (plist-get attrs :arguments))
           (ord 1))
      (setq aya-current
            (format
             "/**
* $1
*
%s
* @return $%d
*/
"
             (mapconcat
              (lambda (x)
                (format "* @param %s $%d"
                        (car x) (incf ord)))
              args
              "\n")
             (incf ord)))
      (aya-expand))))

นอกจากนี้คุณยังต้องป้อนรหัสผ่านอัตโนมัติด้วย ทั้งสองแพ็คเกจมีให้บริการใน MELPA

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.