MCPcopy Create free account
hub / github.com/Codeya-IDE/deepin-ide / diffOutput

Method diffOutput

src/plugins/git/utils/diffutils.cpp:1138–1263  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1136}
1137
1138SideBySideDiffOutput GitDiffWorker::diffOutput(const DiffEditorInput &input)
1139{
1140 SideBySideDiffOutput output;
1141
1142 const QChar separator = '\n';
1143 int blockNumber = 0;
1144 std::array<QString, SideCount> diffText {};
1145
1146 auto addFileLine = [&](DiffSide side, const FileData &fileData) {
1147 output.side[side].selections[blockNumber].append({ input.fileLineFormat });
1148 output.side[side].diffData.setFileInfo(blockNumber, fileData.fileInfo[side]);
1149 diffText[side] += separator;
1150 };
1151
1152 auto addChunkLine = [&](DiffSide side, int skippedLines, const QString &contextInfo = {}) {
1153 output.side[side].selections[blockNumber].append({ input.chunkLineFormat });
1154 output.side[side].diffData.setSkippedLines(blockNumber, skippedLines, contextInfo);
1155 diffText[side] += separator;
1156 };
1157
1158 auto addRowLine = [&](DiffSide side, const RowData &rowData,
1159 int *lineNumber, int *lastLineNumber = nullptr) {
1160 if (rowData.line[side].textLineType == TextLineData::TextLine) {
1161 diffText[side] += rowData.line[side].text;
1162 if (lastLineNumber)
1163 *lastLineNumber = *lineNumber;
1164 ++(*lineNumber);
1165 output.side[side].diffData.setLineNumber(blockNumber, *lineNumber);
1166 } else if (rowData.line[side].textLineType == TextLineData::Separator) {
1167 output.side[side].diffData.setSeparator(blockNumber, true);
1168 }
1169
1170 if (!rowData.equal) {
1171 if (rowData.line[side].textLineType == TextLineData::TextLine)
1172 output.side[side].selections[blockNumber].append({ input.lineFormat[side] });
1173 else
1174 output.side[side].selections[blockNumber].append({ input.spanLineFormat });
1175 }
1176 for (auto it = rowData.line[side].changedPositions.cbegin(),
1177 end = rowData.line[side].changedPositions.cend();
1178 it != end; ++it) {
1179 output.side[side].selections[blockNumber].append(
1180 { input.charFormat[side], it.key(), it.value() });
1181 }
1182 diffText[side] += separator;
1183 };
1184
1185 auto addSkippedLine = [&](DiffSide side, int skippedLines) {
1186 output.side[side].selections[blockNumber].append({ input.chunkLineFormat });
1187 output.side[side].diffData.setSkippedLines(blockNumber, skippedLines);
1188 diffText[side] += separator;
1189 };
1190
1191 for (const FileData &contextFileData : input.contextFileData) {
1192 diffText = {};
1193 output.foldingIndent.insert(blockNumber, 1);
1194
1195 addFileLine(LeftSide, contextFileData);

Callers

nothing calls this directly

Calls 15

polishedSelectionsFunction · 0.85
setFileInfoMethod · 0.80
setSkippedLinesMethod · 0.80
setLineNumberMethod · 0.80
setSeparatorMethod · 0.80
cbeginMethod · 0.80
cendMethod · 0.80
insertMethod · 0.80
atMethod · 0.80
setChunkIndexMethod · 0.80
appendMethod · 0.45
keyMethod · 0.45

Tested by

no test coverage detected