mayurankv / Obsidian-Code-Styler

A plugin for Obsidian.md for styling codeblocks and inline code
Other
185 stars 4 forks source link

Bug: JS code cannot be folded and has highlight problems sometimes #249

Open ZIV-LY opened 2 months ago

ZIV-LY commented 2 months ago

Describe the bug

  1. JavaScript code cannot be folded sometimes even though I input the fold and the title shows "folded code". I close and reopen the note, the code block is open again.
  2. Sometimes the code block has highligh problem in Javascript code. I thought it may be there is === and !== in the Javascript code.

Screenshots

image

Thank you for your help!

mayurankv commented 2 months ago

Oh that is very weird! Could you provide the raw markdown for some code that doesn't fold please! (as many examples as you have would be great!)

evensolberg commented 1 month ago

Any code with == in it gets highlighted, as that is the Markdown code to highlight. I'm seeing the same problem with Rust code.

Example:

let logits = logits.squeeze(0).unwrap().squeeze(0).unwrap().to_dtype(DType::F32).unwrap();
let logits = if self.repeat_penalty == 1.0 {
    logits
} else {
    let start_at = tokens.len().saturating_sub(self.repeat_last_n);
    candle_transformers::utils
        ::apply_repeat_penalty(&logits, self.repeat_penalty, &tokens[start_at..])
        .unwrap()
};

This turns on highlighting until the next == is found. Collapsing the code block hides the problem.

mayurankv commented 1 month ago

I'm unable to replicate the highlighting. Can I ask whether you are aware of any settings or plugins that could affect this? Are you able to replicate it in a sandbox vault? Would appreciate any further info!

mayurankv commented 1 month ago

Also is this in reading mode, editing mode or both?

ZIV-LY commented 1 month ago

Sorry for the confusion. I find it is not just because of "===". The following is the test code. Please have a try:

const rehearse = true; // Set this to false to actually make changes
const moveToTop = false; // Set this to true to move to top instead of deleting. This can help make "extra" sortable.

var fieldName = "extra";

// Choose the patterns to remove by uncommenting the following lines
var remPattens = [];
remPattens.push(new RegExp("^Citations \\(.+\\):", "i"));  // Citation pattern from zoterocitationcounts
remPattens.push(new RegExp("^\\d+ citations \\(.+\\)", "i")); // Citation pattern from zoterocitationcounts
remPattens.push(new RegExp("^ZSCC:.*$", "i")); // ZSCC: 000000
remPattens.push(new RegExp("^\\d+\\s*$", "i")); // 000000
// remPattens.push(new RegExp("^.+", "i")); // Uncomment this to completely wipe out the field

var fieldID = Zotero.ItemFields.getID(fieldName);
var s = new Zotero.Search();
s.libraryID = ZoteroPane.getSelectedLibraryID();
var ids = await s.search();
if (!ids.length) {
    return "No items found";
}
msg += 'the "'+fieldName+'" field will change from: \n' + currentVal + '\n === TO ====> \n' + newValue;
update_counter = 0;
// ids = ids.slice(0, 100); // To try out only on the first 10 items
await Zotero.DB.executeTransaction(async function () {
    for (let id of ids) {
        let item = await Zotero.Items.getAsync(id);
        let mappedFieldID = Zotero.ItemFields.getFieldIDFromTypeAndBase(item.itemTypeID, fieldName);
        let thisFieldName = mappedFieldID ? mappedFieldID : fieldID;
        let currentVal = item.getField(thisFieldName);
        let lines = currentVal.split("\n");
        for (let remPathern of remPattens){
            let lines_match = lines.filter(ex => remPathern.test(ex));
            let lines_nomatch = lines.filter(ex => !remPathern.test(ex));
            if (moveToTop){
                lines = lines_match.concat(lines_nomatch);
            } else { // Delete
                lines = lines_nomatch;
            }
        }
        newValue = lines.join("\n");
        if (currentVal!=newValue){
            if (rehearse){
                let title = item.getField('title');
                let msg = 'This is just a rehearsal. If your run this, \nfor item with title "'+title+'",\n';
                msg += 'the "'+fieldName+'" field will change from: \n' + currentVal + '\n === TO ====> \n' + newValue;
                if (!confirm(msg)) return;
            } else {
                update_counter += 1;
                item.setField(thisFieldName, newValue);
                await item.save();    
            }
        }
    }
});
msg += 'the "'+fieldName+'" field will change from: \n' + currentVal + '\n === TO ====> \n' + newValue;
return update_counter + " of the total " + ids.length + " item(s) updated";

Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test

msg += 'the "'+fieldName+'" field will change from: \n' + currentVal + '\n === TO ====> \n' + newValue;
mayurankv commented 1 month ago

Thank you I will give this a try and let you know!