rust-analyzer
rust-analyzer copied to clipboard
rust-analyzer's native diagnostics are extremely slow on large struct with `#[derive(serde::Deserialize)]`
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:
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,
}