rust-analyzer icon indicating copy to clipboard operation
rust-analyzer copied to clipboard

rust-analyzer's native diagnostics are extremely slow on large struct with `#[derive(serde::Deserialize)]`

Open acshi opened this issue 4 months ago • 2 comments

rust-analyzer version: rust-analyzer version: 0.3.2137-standalone (2b750da1a 2024-10-06)

rustc version: rustc 1.80.1 (3f5fd8dd4 2024-08-06)

editor or extension: VSCode Version: 1.94.1

Making any trivial change to the following struct may take several minutes to flycheck w/ RA stuck at 100% of a CPU core for that time on an Apple M3 Max laptop. Making the same trivial changes 10 times in a row, about 2 times it was very slow (2-5 minutes), and the other 8 times it finished after only a couple of seconds.

For example, after deleting and re-inserting a comma, it was stuck like so for several minutes: Image

I assume this has something to do with the large amount of procedurally generated code, however cargo check has no problem with this and can handle it effectively instantly. I would be equally happy with a work-around as with a complete fix. Right now, sometimes I have to just restart RA after which it is happy again.

code snippet to reproduce
#[derive(serde::Deserialize)]
pub struct ManyValues {
    pub val0: i32,
    pub val1: i32,
    pub val2: i32,
    pub val3: i32,
    pub val4: i32,
    pub val5: i32,
    pub val6: i32,
    pub val7: i32,
    pub val8: i32,
    pub val9: i32,
    pub val10: i32,
    pub val11: i32,
    pub val12: i32,
    pub val13: i32,
    pub val14: i32,
    pub val15: i32,
    pub val16: i32,
    pub val17: i32,
    pub val18: i32,
    pub val19: i32,
    pub val20: i32,
    pub val21: i32,
    pub val22: i32,
    pub val23: i32,
    pub val24: i32,
    pub val25: i32,
    pub val26: i32,
    pub val27: i32,
    pub val28: i32,
    pub val29: i32,
    pub val30: i32,
    pub val31: i32,
    pub val32: i32,
    pub val33: i32,
    pub val34: i32,
    pub val35: i32,
    pub val36: i32,
    pub val37: i32,
    pub val38: i32,
    pub val39: i32,
    pub val40: i32,
    pub val41: i32,
    pub val42: i32,
    pub val43: i32,
    pub val44: i32,
    pub val45: i32,
    pub val46: i32,
    pub val47: i32,
    pub val48: i32,
    pub val49: i32,
    pub val50: i32,
    pub val51: i32,
    pub val52: i32,
    pub val53: i32,
    pub val54: i32,
    pub val55: i32,
    pub val56: i32,
    pub val57: i32,
    pub val58: i32,
    pub val59: i32,
    pub val60: i32,
    pub val61: i32,
    pub val62: i32,
    pub val63: i32,
    pub val64: i32,
    pub val65: i32,
    pub val66: i32,
    pub val67: i32,
    pub val68: i32,
    pub val69: i32,
    pub val70: i32,
    pub val71: i32,
    pub val72: i32,
    pub val73: i32,
    pub val74: i32,
    pub val75: i32,
    pub val76: i32,
    pub val77: i32,
    pub val78: i32,
    pub val79: i32,
    pub val80: i32,
    pub val81: i32,
    pub val82: i32,
    pub val83: i32,
    pub val84: i32,
    pub val85: i32,
    pub val86: i32,
    pub val87: i32,
    pub val88: i32,
    pub val89: i32,
    pub val90: i32,
    pub val91: i32,
    pub val92: i32,
    pub val93: i32,
    pub val94: i32,
    pub val95: i32,
    pub val96: i32,
    pub val97: i32,
    pub val98: i32,
    pub val99: i32,
    pub val100: i32,
    pub val101: i32,
    pub val102: i32,
    pub val103: i32,
    pub val104: i32,
    pub val105: i32,
    pub val106: i32,
    pub val107: i32,
    pub val108: i32,
    pub val109: i32,
    pub val110: i32,
    pub val111: i32,
    pub val112: i32,
    pub val113: i32,
    pub val114: i32,
    pub val115: i32,
    pub val116: i32,
    pub val117: i32,
    pub val118: i32,
    pub val119: i32,
    pub val120: i32,
    pub val121: i32,
    pub val122: i32,
    pub val123: i32,
    pub val124: i32,
    pub val125: i32,
    pub val126: i32,
    pub val127: i32,
    pub val128: i32,
    pub val129: i32,
    pub val130: i32,
    pub val131: i32,
    pub val132: i32,
    pub val133: i32,
    pub val134: i32,
    pub val135: i32,
    pub val136: i32,
    pub val137: i32,
    pub val138: i32,
    pub val139: i32,
    pub val140: i32,
    pub val141: i32,
    pub val142: i32,
    pub val143: i32,
    pub val144: i32,
    pub val145: i32,
    pub val146: i32,
    pub val147: i32,
    pub val148: i32,
    pub val149: i32,
    pub val150: i32,
    pub val151: i32,
    pub val152: i32,
    pub val153: i32,
    pub val154: i32,
    pub val155: i32,
    pub val156: i32,
    pub val157: i32,
    pub val158: i32,
    pub val159: i32,
    pub val160: i32,
    pub val161: i32,
    pub val162: i32,
    pub val163: i32,
    pub val164: i32,
    pub val165: i32,
    pub val166: i32,
    pub val167: i32,
    pub val168: i32,
    pub val169: i32,
    pub val170: i32,
    pub val171: i32,
    pub val172: i32,
    pub val173: i32,
    pub val174: i32,
    pub val175: i32,
    pub val176: i32,
    pub val177: i32,
    pub val178: i32,
    pub val179: i32,
    pub val180: i32,
    pub val181: i32,
    pub val182: i32,
    pub val183: i32,
    pub val184: i32,
    pub val185: i32,
    pub val186: i32,
    pub val187: i32,
    pub val188: i32,
    pub val189: i32,
    pub val190: i32,
    pub val191: i32,
    pub val192: i32,
    pub val193: i32,
    pub val194: i32,
    pub val195: i32,
    pub val196: i32,
    pub val197: i32,
    pub val198: i32,
    pub val199: i32,
    pub val200: i32,
    pub val201: i32,
    pub val202: i32,
    pub val203: i32,
    pub val204: i32,
    pub val205: i32,
    pub val206: i32,
    pub val207: i32,
    pub val208: i32,
    pub val209: i32,
    pub val210: i32,
    pub val211: i32,
    pub val212: i32,
    pub val213: i32,
    pub val214: i32,
    pub val215: i32,
    pub val216: i32,
    pub val217: i32,
    pub val218: i32,
    pub val219: i32,
    pub val220: i32,
    pub val221: i32,
    pub val222: i32,
    pub val223: i32,
    pub val224: i32,
    pub val225: i32,
    pub val226: i32,
    pub val227: i32,
    pub val228: i32,
    pub val229: i32,
    pub val230: i32,
    pub val231: i32,
    pub val232: i32,
    pub val233: i32,
    pub val234: i32,
    pub val235: i32,
    pub val236: i32,
    pub val237: i32,
    pub val238: i32,
    pub val239: i32,
    pub val240: i32,
    pub val241: i32,
    pub val242: i32,
    pub val243: i32,
    pub val244: i32,
    pub val245: i32,
    pub val246: i32,
    pub val247: i32,
    pub val248: i32,
    pub val249: i32,
    pub val250: i32,
    pub val251: i32,
    pub val252: i32,
    pub val253: i32,
    pub val254: i32,
    pub val255: i32,
    pub val257: i32,
    pub val258: i32,
    pub val259: i32,
    pub val260: i32,
    pub val261: i32,
    pub val262: i32,
    pub val263: i32,
    pub val264: i32,
    pub val265: i32,
    pub val266: i32,
    pub val267: i32,
    pub val268: i32,
    pub val269: i32,
    pub val270: i32,
    pub val271: i32,
    pub val272: i32,
    pub val273: i32,
    pub val274: i32,
    pub val275: i32,
    pub val276: i32,
    pub val277: i32,
    pub val278: i32,
    pub val279: i32,
    pub val280: i32,
    pub val281: i32,
    pub val282: i32,
    pub val283: i32,
    pub val284: i32,
    pub val285: i32,
    pub val286: i32,
    pub val287: i32,
    pub val288: i32,
    pub val289: i32,
    pub val290: i32,
    pub val291: i32,
    pub val292: i32,
    pub val293: i32,
    pub val294: i32,
    pub val295: i32,
    pub val296: i32,
    pub val297: i32,
    pub val298: i32,
    pub val299: i32,
    pub val300: i32,
    pub val301: i32,
    pub val302: i32,
    pub val303: i32,
    pub val304: i32,
    pub val305: i32,
    pub val306: i32,
    pub val307: i32,
    pub val308: i32,
    pub val309: i32,
    pub val310: i32,
    pub val311: i32,
    pub val312: i32,
    pub val313: i32,
    pub val314: i32,
    pub val315: i32,
    pub val316: i32,
    pub val317: i32,
    pub val318: i32,
    pub val319: i32,
    pub val320: i32,
    pub val321: i32,
    pub val322: i32,
    pub val323: i32,
    pub val324: i32,
    pub val325: i32,
    pub val326: i32,
    pub val327: i32,
    pub val328: i32,
    pub val329: i32,
    pub val330: i32,
    pub val331: i32,
    pub val332: i32,
    pub val333: i32,
    pub val334: i32,
    pub val335: i32,
    pub val336: i32,
    pub val337: i32,
    pub val338: i32,
    pub val339: i32,
    pub val340: i32,
    pub val341: i32,
    pub val342: i32,
    pub val343: i32,
    pub val344: i32,
    pub val345: i32,
    pub val346: i32,
    pub val347: i32,
    pub val348: i32,
    pub val349: i32,
    pub val350: i32,
    pub val351: i32,
    pub val352: i32,
    pub val353: i32,
    pub val354: i32,
    pub val355: i32,
    pub val356: i32,
    pub val357: i32,
    pub val358: i32,
    pub val359: i32,
    pub val360: i32,
    pub val361: i32,
    pub val362: i32,
    pub val363: i32,
    pub val364: i32,
    pub val365: i32,
    pub val366: i32,
    pub val367: i32,
    pub val368: i32,
    pub val369: i32,
    pub val370: i32,
    pub val371: i32,
    pub val372: i32,
    pub val373: i32,
    pub val374: i32,
    pub val375: i32,
    pub val376: i32,
    pub val377: i32,
    pub val378: i32,
    pub val379: i32,
    pub val380: i32,
    pub val381: i32,
    pub val382: i32,
    pub val383: i32,
    pub val384: i32,
    pub val385: i32,
    pub val386: i32,
    pub val387: i32,
    pub val388: i32,
    pub val389: i32,
    pub val390: i32,
    pub val391: i32,
    pub val392: i32,
    pub val393: i32,
    pub val394: i32,
    pub val395: i32,
    pub val396: i32,
    pub val397: i32,
    pub val398: i32,
    pub val399: i32,
}

acshi avatar Oct 11 '24 16:10 acshi