[][src]Trait swc_common::comments::Comments

pub trait Comments {
    fn add_leading(&self, pos: BytePos, cmt: Comment);
fn add_leading_comments(&self, pos: BytePos, comments: Vec<Comment>);
fn has_leading(&self, pos: BytePos) -> bool;
fn move_leading(&self, from: BytePos, to: BytePos);
fn take_leading(&self, pos: BytePos) -> Option<Vec<Comment>>;
fn add_trailing(&self, pos: BytePos, cmt: Comment);
fn add_trailing_comments(&self, pos: BytePos, comments: Vec<Comment>);
fn has_trailing(&self, pos: BytePos) -> bool;
fn move_trailing(&self, from: BytePos, to: BytePos);
fn take_trailing(&self, pos: BytePos) -> Option<Vec<Comment>>; }

Stores comment.

Implementation notes

Methods uses (&self) instead of (&mut self) for some reasons. Firstly, this is similar to the previous api. Secondly, typescript parser requires backtracking, which requires Clone. To avoid cloning large vectors, we must use [Rc<RefCell>]. We have two option. We may implement it in the parser or in the implementation. If we decide to go with first option, we should pass Comments to parser, and as a result we need another method to take comments back. If we decide to go with second way, we can just pass [&Comments] to the parser. Thirdly, (&self) allows multi-threaded use-cases such as swc itself.

We use Option instead of no-op Comments implementation to avoid allocation unless required.

Required methods

fn add_leading(&self, pos: BytePos, cmt: Comment)

fn add_leading_comments(&self, pos: BytePos, comments: Vec<Comment>)

fn has_leading(&self, pos: BytePos) -> bool

fn move_leading(&self, from: BytePos, to: BytePos)

fn take_leading(&self, pos: BytePos) -> Option<Vec<Comment>>

fn add_trailing(&self, pos: BytePos, cmt: Comment)

fn add_trailing_comments(&self, pos: BytePos, comments: Vec<Comment>)

fn has_trailing(&self, pos: BytePos) -> bool

fn move_trailing(&self, from: BytePos, to: BytePos)

fn take_trailing(&self, pos: BytePos) -> Option<Vec<Comment>>

Loading content...

Implementations on Foreign Types

impl<T: ?Sized, '_> Comments for &'_ T where
    T: Comments
[src]

impl<T: ?Sized> Comments for Rc<T> where
    T: Comments
[src]

impl<T: ?Sized> Comments for Box<T> where
    T: Comments
[src]

Loading content...

Implementors

impl Comments for SingleThreadedComments[src]

impl<T: ?Sized> Comments for Arc<T> where
    T: Comments
[src]

Loading content...