Logifix adalah alat berbasis DataLog untuk secara otomatis memperbaiki pelanggaran analisis statis dalam kode sumber Java. Logifix dapat digunakan untuk memperbaiki pelanggaran analisis statis untuk analisis statis seperti Sonarqube, PMD atau SpotBugs, tetapi juga untuk memodernisasi kode warisan atau bahkan untuk secara otomatis menegakkan aturan khusus khusus untuk basis kode Anda.
Binari prebuilt dan bebas ketergantungan disediakan untuk sistem Linux berbasis macOS dan GNU.
curl -L https://github.com/lyxell/logifix/releases/latest/download/logifix-x86_64-linux-gnu.gz | gunzip -c - > /tmp/logifix
chmod +x /tmp/logifix
sudo mv /tmp/logifix /usr/local/bincurl -L https://github.com/lyxell/logifix/releases/latest/download/logifix-x86_64-macos.gz | gunzip -c - > /tmp/logifix
chmod +x /tmp/logifix
sudo mv /tmp/logifix /usr/local/binlogifix path/to/your/project di Terminal Anda, Jalankan logifix --help untuk mendapatkan bantuan Logifix adalah sistem penulisan ulang yang dipandu analisis untuk kode sumber Java. Ini berarti bahwa Anda mendefinisikan (atau menggunakan (atau menggunakan yang telah ditentukan sebelumnya) analisis dan transformasi yang semuanya bekerja bersama untuk meningkatkan kode Anda. Analisis dan transformasi ditulis dalam DataGalog bahasa berbasis logika yang sangat deklaratif dan digabungkan dan dirantai secara otomatis oleh mesin penulisan ulang.
Logifix lebih dari sekadar sistem pencarian dan ganti. Ini melakukan penulisan ulang dalam beberapa langkah dan dapat mencapai penalaran ekasional yang cerdas dengan membangun poin artikulasi dalam grafik penulisan ulang.
Logifix diimplementasikan dalam dialek datalog berkinerja tinggi yang disintesis ke dalam kode C ++ multi-threaded. Ini sangat disejajarkan bahkan ketika mengerjakan satu file dan biasanya menganalisis proyek besar ribuan file dalam beberapa detik pada perangkat keras modern. Jika proyek Anda lambat menganalisisnya dianggap bug dan Anda harus mengajukan laporan bug.
Logifix direkayasa untuk memproduksi tambalan seperti manusia yang siap dirancang oleh desain tanpa memerlukan modifikasi manual.
Berikut adalah beberapa contoh tambalan yang dihasilkan oleh Logifix.
public static void sign(String token, Map<String, String> params) {
List<String> list = new ArrayList();
String tokenClientSlat = "";
- for (String key : params.keySet()) {
+ for (Map.Entry<String, String> entry : params.entrySet()) {
+ String key = entry.getKey();
if (key.equals("token_client_salt")) {
- tokenClientSlat = params.get(key);
+ tokenClientSlat = entry.getValue();
}
- String paramString = key + "=" + params.get(key);
+ String paramString = key + "=" + entry.getValue();
list.add(paramString);
}
Collections.sort(list); continue;
}
- try {
- JarFile nextJarFile = new JarFile(absNextFile);
- try {
- Attributes attrs = getMainAttrs(nextJarFile);
- Set<Extension> newExtensions = getReferencedExtensions(attrs);
- result.addAll(newExtensions);
- filesToProcess.addAll(extensionsToFiles(newExtensions));
- } finally {
- nextJarFile.close();
- }
+ try (JarFile nextJarFile = new JarFile(absNextFile)) {
+ Attributes attrs = getMainAttrs(nextJarFile);
+ Set<Extension> newExtensions = getReferencedExtensions(attrs);
+ result.addAll(newExtensions);
+ filesToProcess.addAll(extensionsToFiles(newExtensions));
} catch (Exception e) {
invalidLibPaths.append(nextFile.getPath()).append(" ");
} private final Map<Class<?>, String> requestQueueNameCache = new ConcurrentHashMap<>();
public String getRequestQueueName(Class<?> remoteInterface) {
- String str = requestQueueNameCache.get(remoteInterface);
- if (str == null) {
- str = "{" + name + ":" + remoteInterface.getName() + "}";
- requestQueueNameCache.put(remoteInterface, str);
- }
- return str;
+ return requestQueueNameCache.computeIfAbsent(remoteInterface, k -> "{" + name + ":" + k.getName() + "}");
} @Override
public List<SpoonFile> getAllJavaFiles() {
- List<SpoonFile> result = new ArrayList<>();
-
- for (SpoonFile f : getAllFiles()) {
- if (f.isJava()) {
- result.add(f);
- }
- }
-
- return result;
+ return getAllFiles().stream().filter(SpoonFile::isJava).collect(Collectors.toList());
} Lihat Docs/Transformations yang telah ditentukan.md atau kode sumber SRC/aturan.
Ya! Lihat Docs/Membuat-Transformations Anda sendiri.md.
Lihat Docs/Building.md.
Jika Anda menemukan proyek ini menarik, pastikan untuk memeriksa ini juga: